2010-05-08 108 views
0

出於某種原因的DOMParser是增加每個新行\n一些額外的#text元素此URL火狐的DOMParser問題

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與修正。

回答

0

你的問題是什麼?您是否希望不是使用解決方法?我認爲解析器按預期工作時,解決方法是必要的。

+0

我的想法是解析器不工作如預期該解決方法有點人爲。解析器不應該放置'\ n'元素,所以我可能會濫用解析器的功能。真的想要避免這種解決方法。 – Pablo 2010-05-08 06:52:43

4

是的,這就是XML解析器默認應該執行的操作。習慣在子節點上行走,檢查它們是否是元素(nodeType===1)或文本節點(3)。

從Firefox 3.5開始,你會得到Element Traversal API,給你諸如firstElementChildnextElementSibling的房產。這使得遍歷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); 
    } 
} 
+0

Firefox也具有.children屬性,它是所有元素子元素的集合。 – Dormilich 2010-05-12 17:47:11

+0

可以分別使用'Node.TEXT_NODE'和'Node.ELEMENT_NODE'來代替'3'和'1'。 – Westy92 2014-08-21 21:12:26

+1

@ Westy92:您可能無法使用,具體取決於您需要與哪些版本的IE兼容。 – bobince 2014-08-24 22:08:38