1

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>

末尾のスペースがどの時点で取り除かれているのかわかりません。

これが発生している可能性がある場所と、それを修正する方法について誰かが洞察を提供してもらえますか?

4

3 に答える 3

1

空白を保持する必要がある場合は、CDATA セクションcreateCDATASection()などを使用する必要があります。

于 2010-02-10T20:58:24.350 に答える
0

謎が解けました。Internet Explorer で XML をプレビューしないでください。末尾のスペースを隠します。代わりにメモ帳を使用してください。

于 2010-02-10T22:57:29.463 に答える
0

空白を に置き換える必要があります&#xa0;。そうすれば、空白が持続するはずです。

編集
どうやらそれはあなたの問題を解決しませんでした。次に、次のサイトを参照して ください。 http://msdn.microsoft.com/en-us/library/ms757008(VS.85).aspx
http://msdn.microsoft.com/en-us/ライブラリ/ms757885(VS.85).aspx

于 2010-02-10T20:57:56.643 に答える