出于某种原因,DOMParser为该url的每个换行符\n添加了一些额外的#文本元素
http://rt.com/Root.rss
...as以及我尝试过的许多其他RSS。我查看了cnn/bbc源,它们没有换行符和dom解析器很好地处理它们。因此在解析它之前,我必须添加以下内容
var xmlText = htmlText.replace(/\n[ ]*/g, "");
var xmlDoc = parser.parseFromString(xmlText, "text/xml");服务器正在返回text/xml。
var channel = xmlDoc.documentElement.childNodes[0];这是在没有我上面的代码的情况下返回的\n,以及带更正的channel。
发布于 2010-05-08 18:03:33
出于某种原因,DOMParser为此url的每个换行符\n添加了一些额外的#文本元素
这是标准行为。只有IE忽略元素节点之间的whithespace。(XML Whitespace Handling、Whitespace @ MSDN、Whitespace @ MDC)
发布于 2010-05-08 19:00:03
是的,这就是XML解析器默认应该做的事情。习惯于遍历子节点,检查它们是元素(nodeType===1)还是文本节点(3)。
从Firefox3.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);
}
}发布于 2010-05-08 14:32:19
你的问题是什么?您不希望使用变通方法吗?我认为解决方法是必要的,因为解析器可以正常工作。
https://stackoverflow.com/questions/2792951
复制相似问题