XML DOM - 訪問節(jié)點
通過 DOM,您能夠訪問 XML 文檔中的每個節(jié)點。
嘗試一下 - 實例
下面的實例使用 XML 文件 books.xml。
函數(shù) loadXMLDoc(),位于外部 JavaScript 中,用于加載 XML 文件。
使用節(jié)點列表中的索引號來訪問節(jié)點
本例使用 getElementsByTagname() 方法來獲取 "books.xml" 中的第三個 <title> 元素。
使用 length 屬性來遍歷節(jié)點
本例使用 length 屬性來遍歷 "books.xml" 中的所有 <title> 元素。
查看元素的節(jié)點類型
本例使用 nodeType 屬性來獲取 "books.xml" 中根元素的節(jié)點類型。
遍歷元素節(jié)點
本例使用 nodeType 屬性來處理 "books.xml" 中的元素節(jié)點。
使用節(jié)點的關(guān)系來遍歷元素節(jié)點
本例使用 nodeType 屬性和 nextSibling 屬性來處理 "books.xml" 中的元素節(jié)點。
訪問節(jié)點
您可以通過三種方式來訪問節(jié)點:
1. 通過使用 getElementsByTagName() 方法。
2. 通過循環(huán)(遍歷)節(jié)點樹。
3. 通過利用節(jié)點的關(guān)系在節(jié)點樹中導(dǎo)航。
getElementsByTagName() 方法
getElementsByTagName() 返回?fù)碛兄付?biāo)簽名的所有元素。
語法
實例
下面的實例返回 x 元素下的所有 <title> 元素:
請注意,上面的實例僅返回 x 節(jié)點下的 <title> 元素。如需返回 XML 文檔中的所有 <title> 元素,請使用:
在這里,xmlDoc 就是文檔本身(文檔節(jié)點)。
DOM 節(jié)點列表(Node List)
getElementsByTagName() 方法返回節(jié)點列表。節(jié)點列表是節(jié)點的數(shù)組。
下面的代碼使用 loadXMLDoc() 把 "books.xml" 載入 xmlDoc 中,然后在變量 x 中存儲 <title> 節(jié)點的一個列表:
x=xmlDoc.getElementsByTagName("title");
可通過索引號訪問 x 中的 <title> 元素。如需訪問第三個 <title>,您可以編寫:
注意:該索引從 0 開始。
在本教程后面的章節(jié)中,您將學(xué)習(xí)更多有關(guān)節(jié)點列表(Node List)的知識。
DOM 節(jié)點列表長度(Node List Length)
length 屬性定義節(jié)點列表的長度(即節(jié)點的數(shù)量)。
您可以通過使用 length 屬性來遍歷節(jié)點列表:
實例
<!DOCTYPE html> <html> <head> <script src="loadxmldoc.js"></script> </head> <body> <script> xmlDoc=loadXMLDoc("books.xml"); x=xmlDoc.getElementsByTagName("title"); for (i=0;i<x.length;i++) { document.write(x[i].childNodes[0].nodeValue); document.write("<br>"); } </script> </body> </html>
運行實例 ?
點擊 "運行實例" 按鈕查看在線實例
實例解釋:
使用 loadXMLDoc() 把 "books.xml" 載入 xmlDoc 中
獲取所有 <title> 元素節(jié)點
輸出每個 <title> 元素的文本節(jié)點的值
節(jié)點類型(Node Types)
XML 文檔的 documentElement 屬性是根節(jié)點。
節(jié)點的 nodeName 屬性是節(jié)點的名稱。
節(jié)點的 nodeType 屬性是節(jié)點的類型。
您將在本教程的下一章中學(xué)習(xí)更多有關(guān)節(jié)點屬性的知識。
嘗試一下
遍歷節(jié)點
下面的代碼遍歷根節(jié)點的子節(jié)點,同時也是元素節(jié)點:
實例
<!DOCTYPE html> <html> <head> <script src="loadxmldoc.js"></script> </head> <body> <script> xmlDoc=loadXMLDoc("books.xml"); x=xmlDoc.documentElement.childNodes; for (i=0;i<x.length;i++) { if (x[i].nodeType==1) {//Process only element nodes (type 1) document.write(x[i].nodeName); document.write("<br>"); } } </script> </body> </html>
運行實例 ?
點擊 "運行實例" 按鈕查看在線實例
實例解釋:
使用 loadXMLDoc() 把 "books.xml" 載入 xmlDoc 中
獲取根元素的子節(jié)點
檢查每個子節(jié)點的節(jié)點類型。如果節(jié)點類型是 "1",則是元素節(jié)點
如果是元素節(jié)點,則輸出節(jié)點的名稱
導(dǎo)航節(jié)點的關(guān)系
下面的代碼使用節(jié)點關(guān)系導(dǎo)航節(jié)點樹:
實例
<!DOCTYPE html> <html> <head> <script src="loadxmldoc.js"></script> </head> <body> <script> xmlDoc=loadXMLDoc("books.xml"); x=xmlDoc.getElementsByTagName("book")[0].childNodes; y=xmlDoc.getElementsByTagName("book")[0].firstChild; for (i=0;i<x.length;i++) { if (y.nodeType==1) {//Process only element nodes (type 1) document.write(y.nodeName + "<br>"); } y=y.nextSibling; } </script> </body> </html>
運行實例 ?
點擊 "運行實例" 按鈕查看在線實例
使用 loadXMLDoc() 把 "books.xml" 載入 xmlDoc 中
獲取第一個 book 元素的子節(jié)點
把 "y" 變量設(shè)置為第一個 book 元素的第一個子節(jié)點
對于每個子節(jié)點(第一個子節(jié)點從 "y" 開始),檢查節(jié)點類型,如果節(jié)點類型為 "1",則是元素節(jié)點
如果是元素節(jié)點,則輸出該節(jié)點的名稱
把 "y" 變量設(shè)置為下一個同級節(jié)點,并再次運行循環(huán)