[英]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.