Firefox DOMParser问题

时间:2010-05-08 04:42:38

标签: javascript firefox dom parsing

由于某种原因,DOMParser为此网址的每个换行符\n添加了一些额外的#text元素

http://rt.com/Root.rss

...以及我尝试过的许多其他RSS。我检查了cnn / bbc feed,他们没有新行,dom解析器很好地处理它们。所以我必须在解析它之前添加以下内容

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

服务器正在返回text / xml。

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

这将返回\n而不使用上面的代码,并channel进行更正。

3 个答案:

答案 0 :(得分:4)

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

从Firefox 3.5获得Element Traversal API,为您提供firstElementChildnextElementSibling等属性。这使得遍历DOM而忽略空白更容易。或者,您可以使用XPath(doc.evaluate)来查找所需的元素。

如果你想要删除空白节点,那么在解析的DOM上做这个比使用正则表达式hack要好得多:

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

答案 1 :(得分:2)

  

出于某种原因,DOMParser为每个换行符添加了一些额外的#text元素\ n此URL

这是标准行为。只有IE忽略了元素节点之间的空白。 (XML Whitespace HandlingWhitespace @ MSDNWhitespace @ MDC

答案 2 :(得分:0)

你的问题是什么?您希望使用变通方法吗?我认为解决方法是必要的,因为解析器正在按预期工作。