XML DOM Node List

節點列表由 getElementsByTagName() 方法和 childNodes 屬性返回。

實例

下面的例子使用 XML 文件 books.xml

函數 loadXMLDoc(),位于外部 JavaScript 中,用于加載 XML 文件。

從第一個 <title> 元素獲取文本
本例使用 getElementsByTagName() 方法從 "books.xml" 中的第一個 <title> 元素獲取文本。
通過使用 length 屬性來循環節點
本例使用節點列表和 length 屬性來循環 "books.xml" 中的所有 <title> 元素。
獲取元素的屬性
本例使用屬性列表從 "books.xml" 中的第一個 <title> 元素獲取屬性。

DOM Node List

當使用諸如 childNodes 或 getElementsByTagName() 屬性或方法時,會返回 NodeList 對象。

NodeList 對象表示節點的列表,以 XML 中的相同順序。

使用從 0 開始的下標來訪問節點列表中的節點。

下面的圖像表示 "books.xml" 中 <title> 元素的節點列表:

DOM node list

下面的代碼片段通過使用 loadXMLDoc() 把 "books.xml" 載入 xmlDoc 中,并返回 "books.xml" 中 title 元素的一個節點列表:

xmlDoc=loadXMLDoc("books.xml");
x=xmlDoc.getElementsByTagName("title");

以上語句執行之后,x 成為一個 NodeList 對象。

下面的代碼片段從節點列表 x 中的第一個 <title> 元素中返回文本:

txt=x[0].childNodes[0].nodeValue;

在以上語句執行之后,txt = "Everyday Italian"。

TIY

Node List Length

NodeList 對象會保持自身的更新。如果刪除或添加了元素,列表會自動更新。

節點列表的 length 屬性是列表中節點的數量。

下面的代碼片段通過使用 loadXMLDoc() 把 "books.xml" 載入 xmlDoc,并返回 "books.xml" 中 <title> 元素的數量:

xmlDoc=loadXMLDoc("books.xml");
x=xmlDoc.getElementsByTagName('title').length;

在上面的語句執行之后,x = 4。

節點列表的長度可用于循環列表中所有的元素。

下面的代碼片段使用 length 屬性來遍歷 <title> 元素的列表:

xmlDoc=loadXMLDoc("books.xml");
//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("<br />");
}

輸出:

Harry Potter
Everyday Italian
XQuery Kick Start
Learning XML

例子解釋:

  • 通過使用 loadXMLDoc() 把 "books.xml" 載入 xmlDoc
  • 設置保存所有 title 元素的節點列表的 x 變量
  • 從所有 <title> 元素的文本節點輸出值

TIY

DOM Attribute List (Named Node Map)

元素節點的 attributes 屬性返回屬性節點的列表。

這被稱為 Named Node Map,除了方法和屬性上的一些差別以外,它與節點列表相似。

屬性列表會保持自身的更新。如果刪除或添加屬性,這個列表會自動更新。

下面的代碼片段通過使用 loadXMLDoc() 把 "books.xml" 載入 xmlDoc 中,并從 "books.xml" 中的第一個 <book> 元素返回屬性節點的一個列表:

xmlDoc=loadXMLDoc("books.xml");
x=xmlDoc.getElementsByTagName('book')[0].attributes;

以上代碼執行之后,x.length 等于屬性的數量,可使用 x.getNamedItem() 返回屬性節點。

下面的代碼片段一個 book 的 "category" 屬性的值,以及其屬性的數量:

xmlDoc=loadXMLDoc("books.xml");
x=xmlDoc.getElementsByTagName("book")[0].attributes;
document.write(x.getNamedItem("category").nodeValue);
document.write("<br />" + x.length);

輸出:

children
1

例子解釋:

  • 通過使用 loadXMLDoc() 把 "books.xml" 載入 xmlDoc 中
  • 把 x 變量設置為第一個 <book> 元素的所有屬性的一個列表
  • 從 "category" 屬性輸出其值
  • 輸出屬性列表的長度

TIY