不同的瀏覽器在 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(完整)