2011-01-11 50 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");