MSXML移除CDATA部分中的换行符

4

我有一个简单的XML文件,其中包含一个CDATA节,例如:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<config>
    <input>
    <![CDATA[
line
another line
and another
    ]]>
    </input>
    ...
</config>

我有使用MSXML解析CDATA部分的当前代码。

for (int i = 0, count = pChildNodes->Getlength(); i < count; ++i) {
    IXMLDOMNodePtr pNode = pChildNodes->Getitem(i);
    if (pNode->GetnodeType() != NODE_COMMENT && pNode->GetnodeType() != NODE_TEXT) {
        if (pNode->GetnodeType() == NODE_CDATA_SECTION) {
            IXMLDOMCDATASectionPtr pCData = pNode;
            _bstr_t a = pCData->Getdata();
            _variant_t b = pCData->GetnodeValue();
            _bstr_t c = pCData->Gettext();
            _bstr_t d = pCData->Getxml();

但是在XML中的换行符,abcd都没有保留。下面是输出结果:

lineanother lineand another

当我创建文档时,我设置了保留空格标志:

m_pXmlDoc->put_preserveWhiteSpace(VARIANT_TRUE);

您有任何想法如何考虑换行符获取CDATA部分的值吗?

2个回答

0

0

为什么不在将数据存储到XML文档之前对其进行Base64编码呢?这样,您甚至不需要CDATA标记。当您检索值时,只需对其进行Base64解码,原始数据就会被完整保留。

这种解决方案有两个负面影响:

  1. 存储的数据将稍微变大(作为Base64字节)
  2. 您显然会失去XML文件中的纯文本可读性(因为它将被Base64编码)

当然,积极的一面是:无需担心CDATA问题,这将希望在您的情况下抵消负面影响。

url编码、html编码和添加斜杠都是需要额外工作来实现的替代方案,但可以保留一些可读性并缩小文件大小。

干杯


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接