由于某种原因,DOMParser为此网址的每个换行符\n
添加了一些额外的#text元素
...以及我尝试过的许多其他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
进行更正。
答案 0 :(得分:4)
是的,这就是默认情况下XML解析器应该做的事情。习惯于遍历子节点检查它们是否是元素(nodeType===1
)或文本节点(3
)。
从Firefox 3.5获得Element Traversal API,为您提供firstElementChild
和nextElementSibling
等属性。这使得遍历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 Handling,Whitespace @ MSDN,Whitespace @ MDC)
答案 2 :(得分:0)
你的问题是什么?您希望不使用变通方法吗?我认为解决方法是必要的,因为解析器正在按预期工作。