XML DOM 瀏覽器差異
不同的瀏覽器在 XML DOM 中處理空文本節(jié)點的方式是不同的。
實例
下面的例子使用 XML 文件 books.xml。
函數(shù) loadXMLDoc(),位于外部 JavaScript 中,用于加載 XML 文件。
- 顯示節(jié)點列表的長度
- 本例顯示了一個節(jié)點列表的長度。在 IE 和其他瀏覽器中,結(jié)果是不同的。
- 忽略節(jié)點間的空文本
- 本例檢查節(jié)點的 nodeType,且僅處理元素節(jié)點。
DOM 解析中的瀏覽器差異
所有現(xiàn)代瀏覽器都支持 W3C DOM 規(guī)范。
不過,瀏覽器之間是有差異的。重要的區(qū)別有兩點:
- 加載 XML 的方式
- 處理空白和換行的方式
在 “解析 XML DOM” 這一節(jié),已經(jīng)解釋了加載 XML 的不同方式。
在本節(jié)中,我們將講解處理空白和換行的不同方式。
DOM - 空白和換行
XML 經(jīng)常在節(jié)點之間含有換行或空白字符。這是在使用簡單的編輯器(比如記事本)時經(jīng)常出現(xiàn)的情況。
下面的例子(由記事本編輯)在每行之間含有 CR/LF,在每個子節(jié)點之前含有兩個空格:
<book> <title>Harry Potter</title> <author>J K. Rowling</author> <year>2005</year> <price>29.99</price> </book>
Firefox,以及其他一些瀏覽器,會把空的空白或換行作為文本節(jié)點來處理,而 Internet Explorer 不會這樣。
下面的代碼片段顯示 (books.xml 的) 根元素?fù)碛卸嗌賯子節(jié)點:
xmlDoc=loadXMLDoc("books.xml"); x=xmlDoc.documentElement.childNodes; document.write("Number of child nodes: " + x.length);
例子解釋:
- 通過使用 loadXMLDoc() 把 "books.xml" 載入 xmlDoc 中
- 獲取根元素的子節(jié)點
- 輸出子節(jié)點數(shù)目
結(jié)果取決于所使用的瀏覽器。Firefox 輸出 9,而 IE 輸出 4。
忽略節(jié)點間的空文本
如需忽略元素節(jié)點之間的空文本節(jié)點,需要檢查節(jié)點類型。元素節(jié)點的類型是 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 中
- 獲取根元素的子節(jié)點
- 檢查每個子節(jié)點的節(jié)點類型。如果節(jié)點類型是 "1",則是元素節(jié)點