XML DOM 瀏覽器差異

不同的瀏覽器在 XML DOM 中處理空文本節點的方式是不同的。

實例

下面的例子使用 XML 文件 books.xml

函數 loadXMLDoc(),位于外部 JavaScript 中,用于加載 XML 文件。

顯示節點列表的長度
本例顯示了一個節點列表的長度。在 IE 和其他瀏覽器中,結果是不同的。
忽略節點間的空文本
本例檢查節點的 nodeType,且僅處理元素節點。

DOM 解析中的瀏覽器差異

所有現代瀏覽器都支持 W3C DOM 規范。

不過,瀏覽器之間是有差異的。重要的區別有兩點:

  • 加載 XML 的方式
  • 處理空白和換行的方式

在 “解析 XML DOM” 這一節,已經解釋了加載 XML 的不同方式。

在本節中,我們將講解處理空白和換行的不同方式。

DOM - 空白和換行

XML 經常在節點之間含有換行或空白字符。這是在使用簡單的編輯器(比如記事本)時經常出現的情況。

下面的例子(由記事本編輯)在每行之間含有 CR/LF,在每個子節點之前含有兩個空格:

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

Firefox,以及其他一些瀏覽器,會把空的空白或換行作為文本節點來處理,而 Internet Explorer 不會這樣。

下面的代碼片段顯示 (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(簡單) 或者 TIY(完整)