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() 返回擁有指定標簽名的所有元素。

語法

node.getElementsByTagName("tagname");

實例

下面的例子返回 x 元素下的所有 <title> 元素:

x.getElementsByTagName("title");

請注意,上面的例子僅返回 x 節點下的 <title> 元素。要返回 XML 文檔中的所有 <title> 元素,請使用:

xmlDoc.getElementsByTagName("title");

在這里,xmlDoc 就是文檔本身(文檔節點)。

DOM Node List

getElementsByTagName() 方法返回節點列表 (node list)。節點列表是節點的數組。

下面的代碼通過使用 loadXMLDoc() 把 "books.xml" 載入 xmlDoc 中,然后在變量 x 中存儲 <title> 節點的一個列表:

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

可通過下標訪問 x 中的 <title> 元素。要訪問第三個 <title>,您可以編寫:

y=x[2];

TIY

注釋:下標以 0 起始。

在本教程中稍后的章節,您將學到更多有關 Node List 的知識。

DOM Node List Length

length 屬性定義節點列表的長度(即節點的數目)。

您能夠通過使用 length 屬性來循環一個節點列表:

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 />");
  }

例子解釋:

  1. 使用 loadXMLDoc() 把 "books.xml" 載入 xmlDoc
  2. 取得所有 <title> 元素節點
  3. 輸出每個 <title> 元素的文本節點的值

TIY

Node Type

XML 文檔的 documentElement 屬性是根節點。

節點的 nodeName 屬性是節點的名稱。

節點的 nodeType 屬性是節點的類型。

您將在本教程的下一節中學習更多有關節點屬性的知識。

TIY

遍歷節點

下面的代碼循環根節點的子節點,同時也是元素節點:

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 />");
  } 
}

例子解釋:

  1. 通過使用 loadXMLDoc() 把 "books.xml" 載入 xmlDoc 中
  2. 獲得根元素的子節點
  3. 檢查每個子節點的節點類型。如果節點類型是 "1",則是元素節點
  4. 如果是元素節點,則輸出節點的名稱

TIY

利用節點的關系進行導航

下面的代碼通過利用節點的關系在節點樹中進行導航:

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;
}
  1. 通過使用 loadXMLDoc() 把 "books.xml" 載入 xmlDoc 中
  2. 獲得第一個 book 元素的子節點
  3. 把 "y" 變量設置為第一個 book 元素的第一個子節點
  4. 檢查每個子節點的節點類型,如果節點類型是 "1",則是元素節點
  5. 如果是元素節點,則輸出該節點的名稱
  6. 把 "y" 變量設置為下一個同級節點,并再次運行循環

TIY