MSXML4 を使用して XML ファイルを書き込もうとしています。保持する必要がある末尾のスペースを持つデータ要素がある場合を除いて、正常に機能します。
新しい要素を挿入する次のコードが与えられます。
const _bstr_t k_Parent (ToBSTR("ParentNode"));
const _bstr_t k_Child (ToBSTR("ChildNode"));
const _bstr_t k_Data (ToBSTR("DataWithTrailingSpace "));
const _bstr_t k_Namespace (ToBSTR("TheNameSpace"));
MSXML2::IXMLDOMDocument2Ptr m_pXmlDoc;
m_pXmlDoc->async = VARIANT_FALSE;
m_pXmlDoc->validateOnParse = VARIANT_FALSE;
m_pXmlDoc->resolveExternals = VARIANT_FALSE;
m_pXmlDoc->preserveWhiteSpace = VARIANT_TRUE;
MSXML2::IXMLDOMNodePtr pElement = m_pXmlDoc->createNode(NODE_ELEMENT, k_Child, k_Namespace);
MSXML2::IXMLDOMNodePtr pParent = m_pXmlDoc->selectSingleNode(k_Parent);
pElement->put_text (k_Data);
MSXML2::IXMLDOMNodePtr pNewChild = pParent->appendChild(pElement);
「pNewChild->text」をチェックすると、テキストにはまだ末尾のスペースが含まれています。ファイルに書き込もうとすると:
std::string xml (static_cast<std::string>(m_pXmlDoc->xml));
std::ofstream file("output.xml");
file << xml << std::endl;
file.flush();
file.close();
出力は次のとおりです。
<ParentNode>
<ChildNode>DataWithTrailingSpace</ChildNode>
</ParentNode>
代わりに (「DataWithTrailingSpace」の後ろの余分なスペースに注意してください):
<ParentNode>
<ChildNode>DataWithTrailingSpace </ChildNode>
</ParentNode>
末尾のスペースがどの時点で取り除かれているのかわかりません。
これが発生している可能性がある場所と、それを修正する方法について誰かが洞察を提供してもらえますか?