代码之家  ›  专栏  ›  技术社区  ›  Pablo

firefox domparser问题

  •  1
  • Pablo  · 技术社区  · 15 年前

    出于某种原因,domparser正在为每个换行添加一些额外的文本元素 \n 对于这个URL

    http://rt.com/Root.rss

    …以及我尝试过的其他RSS。我查看了CNN/BBC的提要,它们没有新行,DOM解析器处理得很好。所以在分析之前我必须添加以下内容

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

    服务器正在返回文本/XML。

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

    这种回归 \n 没有我上面的代码 channel 带修正。

    3 回复  |  直到 15 年前
        1
  •  2
  •   Dormilich    15 年前

    出于某种原因,domparser正在为该URL的每个换行添加一些额外的文本元素。

    这是标准行为。只有ie忽略元素节点之间的空格。( XML Whitespace Handling , Whitespace @ MSDN , Whitespace @ MDC )

        2
  •  4
  •   bobince    15 年前

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

    从火狐3.5你可以 Element Traversal API 为您提供 firstElementChild nextElementSibling . 这使得在忽略空白的同时遍历DOM变得更容易。或者可以使用xpath( doc.evaluate )找到你想要的元素。

    如果您想永久地删除空白节点,最好在解析的DOM上执行,而不是使用regex 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);
        }
    }
    
        3
  •  0
  •   Delan Azabani    15 年前

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