XML DOM-webbläsardifferenser

Olika webbläsare behandlar textnoder på olika sätt i XML DOM.

Exempel

Följande exempel använder XML-filer books.xml.

Funktion loadXMLDoc()Ligger utanför JavaScript och används för att ladda XML-filer.

Visa längden på nodlistan
Detta exempel visar längden på en nodlista. Resultatet är olika i IE och andra webbläsare.
忽略节点间的空文本
Detta exempel kontrollerar nodens nodeType och hanterar endast elementnoder.

Webbläsardifferenser i DOM-parsning

Alla moderna webbläsare stöder W3C DOM-standarden.

Men det finns skillnader mellan webbläsare. De viktiga skillnaderna är två:

  • Sätt att ladda XML
  • Sätt att hantera tomma platser och radbrytningar

i "Analysera XML DOM” Detta avsnitt har förklarat olika sätt att ladda XML.

I denna sektion kommer vi att förklara olika sätt att hantera tomma platser och radbrytningar.

DOM - Tomma platser och radbrytningar

XML innehåller ofta radbrytningar eller blanktecken mellan noder. Detta är ett vanligt problem när man använder enkla redigerare (t.ex. Notepad).

Följande exempel (redigerat i Notepad) innehåller CR/LF mellan varje rad och två blanksteg före varje undernod:

<book>
  <title>Harry Potter</title>
  <author>J K. Rowling</author>
  <year>2005</year>
  <price>29.99</price>
</book>

Firefox och andra webbläsare behandlar tomma tomma platser eller radbrytningar som textnoder, medan Internet Explorer inte gör det.

下面的代码片段显示 (books.xml 的) 根元素拥有多少个子节点:

xmlDoc=loadXMLDoc("books.xml");
x=xmlDoc.documentElement.childNodes;
document.write("Number of child nodes: " + x.length);

例子解释:

  • 通过使用 loadXMLDoc() 把 "books.xml" 载入 xmlDoc 中
  • 获取根元素的子节点
  • 输出子节点数目

结果取决于所使用的浏览器。Firefox 输出 9,而 IE 输出 4。

TIY

忽略节点间的空文本

如需忽略元素节点之间的空文本节点,需要检查节点类型。元素节点的类型是 1:

xmlDoc=loadXMLDoc("books.xml");
x=xmlDoc.documentElement.childNodes;
for (i=0;i<x.length;i++)
{ 
if (x[i].nodeType==1)
  {// only process element nodes 
  document.write(x[i].nodeName);
  document.write("<br />");
  } 
}

例子解释:

  • 通过使用 loadXMLDoc() 把 "books.xml" 载入 xmlDoc 中
  • 获取根元素的子节点
  • 检查每个子节点的节点类型。如果节点类型是 "1",则是元素节点

TIY(简单) eller TIY(完整)