首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >火狐DOMParser问题

火狐DOMParser问题
EN

Stack Overflow用户
提问于 2010-05-08 12:42:38
回答 3查看 2.6K关注 0票数 2

出于某种原因,DOMParser为该url的每个换行符\n添加了一些额外的#文本元素

http://rt.com/Root.rss

...as以及我尝试过的许多其他RSS。我查看了cnn/bbc源,它们没有换行符和dom解析器很好地处理它们。因此在解析它之前,我必须添加以下内容

代码语言:javascript
复制
var xmlText = htmlText.replace(/\n[ ]*/g, "");
var xmlDoc = parser.parseFromString(xmlText, "text/xml");

服务器正在返回text/xml。

代码语言:javascript
复制
var channel = xmlDoc.documentElement.childNodes[0];

这是在没有我上面的代码的情况下返回的\n,以及带更正的channel

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-05-08 18:03:33

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

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

票数 2
EN

Stack Overflow用户

发布于 2010-05-08 19:00:03

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

从Firefox3.5开始,你得到了Element Traversal API,提供了像firstElementChildnextElementSibling这样的属性。这使得在忽略空白的同时遍历DOM变得更容易。或者,您可以使用XPath (doc.evaluate)来查找所需的元素。

如果您想永久删除空格节点,最好在解析后的DOM上执行此操作,而不是使用regex hack:

代码语言:javascript
复制
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);
    }
}
票数 4
EN

Stack Overflow用户

发布于 2010-05-08 14:32:19

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2792951

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档