在其中读取带有]]的XML CDATA部分

时间:2011-01-11 17:29:02

标签: javascript xml cdata

我正在使用XMLHttpRequest在Javascript中编写RSS阅读器。

对于某些RSS Feed,我没有遇到任何问题,但在某些情况下,xmlDocument.firstChild属性始终为NULL

在尝试查看有效的XML与无效的XML之间的差异后,我发现以下是导致错误的原因。

<item>
    <description>
        <![CDATA[This is a description for a test [...]]]>
    </description>
</item>

因为在这个描述标签中我有一个结束括号后跟CDATA的右括号导致我的错误,我使用相同的XML使用LINQ制作了一个C#代码并且一切正常。

CDATA右括号前面的右括号会导致这种奇怪的行为。作为测试我尝试使用C#和LINQ读取相同的XML,一切正常。

然后我尝试在右括号之间添加一个空格,如下所示

<![CDATA[This is a description for a test [...] ]]>

它有效!

我的javascript代码

function LoadRSS() {
    http_request.onreadystatechange = function () { showContent(http_request); };
    http_request.open("GET", "./feeds/test.xml", true);
    http_request.send(false);
}


function showContent(http_request) {
    if (http_request.readyState == 4) {
        if (http_request.status == 200) {
            var parser = new DOMParser();
            var xml_doc = parser.parseFromString(http_request.responseText, "text/xml");
            alert(xml_doc.firstChild)
        }
        else {
            xml_doc = null;
        }
    }
}

有没有人遇到类似的事情?现在我真的不知道如何处理任何意见和建议都欢迎。

2 个答案:

答案 0 :(得分:5)

无论你使用什么浏览器似乎都错误地解析了CDATA部分 - 只有]]>标记了该部分的结尾,任何其他方括号都不应该影响这一点。

答案 1 :(得分:1)

至于“如何继续”...为什么不在CDATA块结束之前总是包含空格?你无法控制生成的XML吗?如果是这样,你可以使用JS来:

var xml = http_request.responseText.replace( /\]\]>/g, ' ]]>' );
var xml_doc = parser.parseFromString(xml, "text/xml");