2011-01-11 78 views
5

我使用XMLHttpRequest在Javascript中對RSS閱讀器進行編碼。閱讀XML CDATA部分]]在其中

對於一些RSS訂閱我沒有問題,但在某些情況下,xmlDocument.firstChild屬性總是NULL

想看到工作的XML和沒有工作,我發現下面的那些之間的區別後是錯誤的原因。

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

因爲在此說明標籤我有一個右括號其次是CDATA的右括號引起我的錯誤,我做了使用LINQ對相同的XML 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; 
     } 
    } 
} 

有誰曾經面臨類似的東西?現在我真的不知道如何進行任何意見和建議,歡迎。

+1

這似乎是XML解析器中的一個錯誤。你使用什麼操作系統/瀏覽器/版本? – Phrogz 2011-01-11 17:37:43

+0

該瀏覽器被稱爲OBIGO,它是一個手機瀏覽器 – YasuDevil 2011-01-11 17:40:05

+1

是的,瀏覽器壞了。 CDATA部分可以包含']]'組合;只有完整']]>'結束它。 – StaxMan 2011-01-11 17:52:08

回答

5

無論您使用哪種瀏覽器,似乎都不正確地解析CDATA部分 - 只有]]>表示該部分結束,其他任何方括號都不應該影響該部分。

1

至於「如何繼續......」爲什麼不在CDATA塊的末尾總是包含空格呢?你不能控制生成的XML嗎?如果是這樣,你可以使用JS來:

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