出于某种原因的DOMParser是增加每个新行一些额外#text元素\n
此URL
http://rt.com/Root.rss
......以及许多其他RSS我试过。 我查了一下美国有线电视新闻网/英国广播公司饲料,他们没有换行和DOM解析器处理他们很好。 所以,我必须分析它之前添加以下
var xmlText = htmlText.replace(/\n[ ]*/g, "");
var xmlDoc = parser.parseFromString(xmlText, "text/xml");
服务器返回的文本/ XML。
var channel = xmlDoc.documentElement.childNodes[0];
该返回\n
没有我的代码和上述channel
与校正。
出于某种原因的DOMParser是增加每个新行\ n一些额外#text元素此URL
这是标准的行为。 只有IE忽略元素节点之间whithespace。 ( XML处理空白 , 空白@ MSDN , 空白@ MDC )
是的,这就是XML解析器应该在默认情况下做的。 习惯于通过子节点检查边走边看它们是否元素( nodeType===1
)或文本节点( 3
)。
从Firefox 3.5,你得到的元素遍历API ,让你喜欢的属性firstElementChild
和nextElementSibling
。 这使得走在DOM,而忽略空格更容易。 另外,您可以使用XPath( doc.evaluate
)找到你想要的元素。
如果你想删除空白节点为好,这是一个更好的主意做它的解析的DOM比使用正则表达式黑客:
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);
}
}
你的问题是什么? 你想不使用变通方法? 我认为,解决办法是必要的,因为解析器工作正常。