我正在尝试使用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>
我无法弄清楚尾随空间被剥离的位置。
有人可以提供一些见解,了解这可能发生的地方以及我如何纠正它?
答案 0 :(得分:1)
如果您需要保留空格,那么您应该通过createCDATASection()
等使用CDATA部分。
答案 1 :(得分:0)
您应该用 
替换空格。那样你的空白就应该坚持下去。
修改强>
显然它没有解决你的问题。那么也许你想看看这些网站:
http://msdn.microsoft.com/en-us/library/ms757008(VS.85).aspx
http://msdn.microsoft.com/en-us/library/ms757885(VS.85).aspx
答案 2 :(得分:0)
神秘解决了。不要在Internet Explorer中预览XML。它隐藏了尾随空格。改为使用记事本。