DOM 訪問
XML DOM - 存取節點
透過 DOM,您能夠存取 XML 文件中的每個節點。
嘗試 - 實例
下面的實例使用 XML 檔案 books.xml。
函數 loadXMLDoc(),位於外部 JavaScript 中,用於載入 XML 檔案。
使用節點清單中的索引號碼來存取節點
本例使用 getElementsByTagname() 方法來取得 "books.xml" 中的第三個 <title> 元素。
使用 length 屬性來遍歷節點
本例使用 length 屬性來遍歷 "books.xml" 中的所有 <title> 元素。
查看元素的節點類型
本範例使用 nodeType 屬性來取得 "books.xml" 中根元素的節點類型。
遍歷元素節點
本範例使用 nodeType 屬性來處理 "books.xml" 中的元素節點。
使用節點的關係來遍歷元素節點
本例使用 nodeType 屬性和 nextSibling 屬性來處理 "books.xml" 中的元素節點。
存取節點
您可以透過三種方式存取節點:
#1. 透過使用 getElementsByTagName() 方法。
2. 透過循環(遍歷)節點樹。
3. 透過利用節點的關係在節點樹中導航。
getElementsByTagName() 方法
getElementsByTagName() 傳回所有擁有指定標籤名稱的元素。
語法
下面的實例傳回x 元素下的所有<title> 元素:
DOM 節點清單(Node List)getElementsByTagName() 方法傳回節點清單。節點列表是節點的陣列。 下面的程式碼使用loadXMLDoc() 把"books.xml" 載入xmlDoc 中,然後在變數x 中儲存<title> 節點的一個列表:
x=xmlDoc.getElementsByTagName("title");
注意:該索引從 0 開始。
在本教學後面的章節中,您將學習更多有關節點清單(Node List)的知識。
DOM 節點清單長度(Node List Length)
length 屬性定義節點清單的長度(即節點的數量)。
您可以透過使用length 屬性來遍歷節點清單:
實例
<!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> 元素節點
#輸出每個<title> 元素的文字節點的值
#節點類型(Node Types)
XML 文件的documentElement 屬性是根節點。
節點的 nodeName 屬性是節點的名稱。
節點的 nodeType 屬性是節點的型別。
您將在本教程的下一章中學習更多有關節點屬性的知識。
試試看
遍歷節點
下面的程式碼遍歷根節點的子節點,同時也是元素節點:
實例
<!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 中
取得根元素的子節點
#檢查每個子節點的節點類型。如果節點類型是"1",則是元素節點
如果是元素節點,則輸出節點的名稱
導航節點的關係
下面的程式碼使用節點關係導航節點樹:
實例
<!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 元素的子節點
- 把"y" 變數設定為第一個book 元素的第一個子節點
- #對於每個子節點(第一個子節點從"y" 開始),檢查節點類型,如果節點類型為"1",則是元素節點
- 如果是元素節點,則輸出該節點的名稱
- 把"y" 變數設定為下一個同級節點,並再次執行迴圈