2010-02-10 50 views
1

我正在嘗試使用MSXML4編寫XML文件。它工作正常,除非我有一個必須保留的尾隨空格的數據元素。寫入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->文本」,文本仍然包含尾隨空格。當我嘗試將其寫入到文件:

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> 

我想不通在什麼時候尾隨空間被剝離。

有人可以提供一些見解,可能會發生這種情況以及我如何糾正它?

回答

0

神祕解決了。不要在Internet Explorer中預覽您的XML。它隱藏了尾隨空格。改用記事本。

1

如果你需要保留空白,那麼你應該通過createCDATASection()等進行使用CDATA部分。

+0

雖然這保留了它也注入「<![CDATA [」到XML的空間,我不支持這個空格。接收它的系統拒絕它,因爲'數據'格式無效。 輸出必須是「 DataWithTrailingSpace」。 – TERACytE 2010-02-10 21:21:22

+0

然後你的接收系統__不支持XML__。在XML中,「 DataWithTrailingSpace」與「」完全相同「![CDATA [DataWithTrailingSpace]]>」 – MSalters 2010-02-11 10:48:36