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 部分 viacreateCDATASection()等。

于 2010-02-10T20:58:24.350 回答
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 回答
0

谜团已揭开。不要在 Internet Explorer 中预览您的 XML。它隐藏尾随空格。改用记事本。

于 2010-02-10T22:57:29.463 回答