火狐的DOMParser问题(Firefox DOMParser problem)

2019-10-21 14:42发布

出于某种原因的DOMParser是增加每个新行一些额外#text元素\n此URL

http://rt.com/Root.rss

......以及许多其他RSS我试过。 我查了一下美国有线电视新闻网/英国广播公司饲料,他们没有换行和DOM解析器处理他们很好。 所以,我必须分析它之前添加以下

var xmlText = htmlText.replace(/\n[ ]*/g, "");
var xmlDoc = parser.parseFromString(xmlText, "text/xml");

服务器返回的文本/ XML。

var channel = xmlDoc.documentElement.childNodes[0];

该返回\n没有我的代码和上述channel与校正。

Answer 1:

出于某种原因的DOMParser是增加每个新行\ n一些额外#text元素此URL

这是标准的行为。 只有IE忽略元素节点之间whithespace。 ( XML处理空白 , 空白@ MSDN , 空白@ MDC )



Answer 2:

是的,这就是XML解析器应该在默认情况下做的。 习惯于通过子节点检查边走边看它们是否元素( nodeType===1 )或文本节点( 3 )。

从Firefox 3.5,你得到的元素遍历API ,让你喜欢的属性firstElementChildnextElementSibling 。 这使得走在DOM,而忽略空格更容易。 另外,您可以使用XPath( doc.evaluate )找到你想要的元素。

如果你想删除空白节点为好,这是一个更好的主意做它的解析的DOM比使用正则表达式黑客:

function removeWhitespace(node) {
    for (var i= node.childNodes.length; i-->0;) {
        var child= node.childNodes[i];
        if (child.nodeType===3 && child.data.match(/^\s*$/))
            node.removeChild(child);
        if (child.nodeType===1)
            removeWhitespace(child);
    }
}


Answer 3:

你的问题是什么? 你想使用变通方法? 我认为,解决办法是必要的,因为解析器工作正常。



文章来源: Firefox DOMParser problem