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