簡體   English   中英

在其中使用[]讀取XML CDATA部分

[英]Reading XML CDATA section with ]] in it

我正在使用XMLHttpRequest用Javascript編寫RSS閱讀器。

對於某些RSS Feed,我沒有問題,但在某些情況下, xmlDocument.firstChild屬性始終為NULL

在嘗試查看有效的XML與無效的XML之間的區別之后,我發現以下是導致錯誤的原因。

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

因為在這個描述標簽中我有一個右括號,然后是CDATA的右括號引起了我的錯誤,所以我使用LINQ使用C#編寫了相同的XML的代碼,並且一切正常。

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;
        }
    }
}

有沒有人遇到過類似的事情? 現在我真的不知道該如何進行任何評論和建議。

無論您使用的是哪種瀏覽器似乎都錯誤地解析了CDATA部分-僅]]>標記了該部分的結尾,任何其他方括號都不會對此產生任何影響。

至於“如何進行”……為什么不總是在CDATA塊的末尾添加空格? 您是否無法控制生成的XML? 如果是這樣,您可以使用JS來:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM