XML DOM – 節點列表和命名節點圖
節點列表由getElementsByTagName() 方法和childNodes 屬性返回。
嘗試一下- 實例
下面的實例使用XML文件books.xml 。
函數loadXMLDoc() ,位於外部JavaScript中,用於加載XML文件。
從第一個<title>元素獲取文本
本例使用getElementsByTagName() 方法從"books.xml" 中的第一個<title> 元素獲取文本。
使用length屬性遍歷節點
本例使用節點列表和length 屬性來遍歷"books.xml" 中所有的<title> 元素。
獲取元素的屬性
本例使用屬性列表從"books.xml" 中的第一個<book> 元素獲取屬性。
DOM 節點列表(Node List)
當使用諸如childNodes 或getElementsByTagName() 的屬性或方法是,會返回節點列表對象。
節點列表對象表示節點的列表,與XML 中的順序相同。
節點列表中的節點使用從0 開始的索引號進行訪問。
下面的圖像表示" books.xml "中<title>元素的節點列表:
下面的代碼片段通過使用loadXMLDoc()把" books.xml "載入xmlDoc中,並返回"books.xml"中title元素的節點列表:
x=xmlDoc.getElementsByTagName("title");
在上面的語句執行之後,x 是節點列表對象。
下面的代碼片段從節點列表(x)中的第一個<title> 元素返回文本:
在上面的語句執行之後,txt = "Everyday Italian"。
節點列表長度(Node List Length)
節點列表對象會保持自身的更新。 如果刪除或添加了元素,列表會自動更新。
節點列表的length 屬性是列表中節點的數量。
下面的代碼片段通過使用loadXMLDoc()把" books.xml "載入xmlDoc中,並返回"books.xml"中<title>元素的數量:
x=xmlDoc.getElementsByTagName('title').length;
在上面的語句執行之後,x = 4。
節點列表的長度可用於遍歷列表中所有的元素。
下面的代碼片段使用length 屬性來遍歷<title> 元素的列表:
實例
//the x variable will hold a node list
x=xmlDoc.getElementsByTagName('title');
for (i=0;i<x.length;i++)
{
document.write(x[i].childNodes[0].nodeValue);
document.write("
");
}
輸出:
Harry Potter
XQuery Kick Start
Learning XML
嘗試一下»
實例解釋:
- 使用loadXMLDoc()把" books.xml "載入xmlDoc中
- 設置x 變量來保存所有title 元素的節點列表
- 從所有<title> 元素的文本節點輸出值
DOM 屬性列表(命名節點圖Named Node Map)
元素節點的attributes 屬性返回屬性節點的列表。
這被稱為命名節點圖(Named Node Map),除了方法和屬性上的一些差別以外,它與節點列表相似。
屬性列表會保持自身的更新。 如果刪除或添加屬性,這個列表會自動更新。
下面的代碼片段通過使用loadXMLDoc()把" books.xml "載入xmlDoc中,並返回"books.xml"中第一個<book>元素的屬性節點列表:
x=xmlDoc.getElementsByTagName('book')[0].attributes;
在上面的代碼執行之後,x.length 等於屬性的數量,可使用x.getNamedItem() 返回屬性節點。
下面的代碼片段顯示一個book 的"category" 屬性的值,以及其屬性的數量:
實例
x=xmlDoc.getElementsByTagName("book")[0].attributes;
document.write(x.getNamedItem("category").nodeValue);
document.write("
" + x.length);
輸出:
1
嘗試一下»
實例解釋:
- 使用loadXMLDoc()把" books.xml "載入xmlDoc中
- 設置x 變量來保存第一個<book> 元素的所有屬性的一個列表
- 從"category" 屬性輸出值
- 輸出屬性列表的長度