我有一个带有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();

但是abcd都不保留XML中的换行符。这是输出:
lineanother lineand another

创建文档时,我设置了保留空白标志:
m_pXmlDoc->put_preserveWhiteSpace(VARIANT_TRUE);

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

最佳答案

我不认为CDATA应该保留空白。通常用于转义诸如之类的字符。 http://www.javacommerce.com/displaypage.jsp?name=whitespa.sql&id=18238这可能会有所帮助。

09-27 03:23