4

我有一个带有 CDATA 部分的简单 XML,例如:

<?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();

但没有一个a,b或保留 XML 中cd换行符。这是输出:

lineanother lineand another

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

m_pXmlDoc->put_preserveWhiteSpace(VARIANT_TRUE);

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

4

2 回答 2

0

为什么不在将数据存储到 XML 文档中之前对数据进行 Base64 编码?那么你甚至不需要 CDATA 标签。检索时只需 Base 64 解码该值,原始数据将全部保留。

这个解决方案有两个缺点:

  1. 存储的数据会稍大(以 Base 64 字节计)
  2. 您显然会失去 XML 文件中的纯文本可读性(因为它将是 Base 64 编码的)

当然,积极的一面:不必担心 CDATA 问题,这有望超过对您的情况的负面影响。

url 编码、html 编码和添加斜线都是需要额外工作才能实现的替代方案,但保留一些可读性以及较小的尺寸。

干杯

于 2009-02-21T20:55:49.950 回答
0

我不认为 CDATA 应该保留空格。它通常用于转义字符,例如 < 或 >。http://www.javacommerce.com/displaypage.jsp?name=whitespa.sql&id=18238这可能会有所帮助。

于 2009-02-20T23:02:30.217 回答