XML DOM 訪問節點

通過 DOM,您能夠訪問 XML 文檔中的每個節點。

訪問節點

您可以通過三種方式來訪問節點:

  • 通過使用 getElementsByTagName() 方法
  • 通過循環(遍歷)節點樹
  • 通過利用節點的關系在節點樹中導航

getElementsByTagName() 方法

getElementsByTagName() 返回擁有指定標簽名的所有元素。

語法

node.getElementsByTagName("tagname");

實例

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

x.getElementsByTagName("title");

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

xmlDoc.getElementsByTagName("title");

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

DOM 節點列表

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

x = xmlDoc.getElementsByTagName("title");

可通過索引號訪問 x 中的 <title> 元素。如需訪問第三個 <title>,您可以這樣寫:

y = x[2];

注釋:索引從 0 開始。

親自試一試

DOM 節點列表長度

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

您能夠使用 length 屬性來循環遍歷節點列表:

實例

var x = xmlDoc.getElementsByTagName("title");
for (i = 0; i <x.length; i++) {
  // 此處可以寫處理每個節點的代碼
  }

親自試一試

節點類型

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

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

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

您將在本教程的下一章中學到有關節點屬性的更多內容。

親自試一試

遍歷節點

以下代碼循環遍歷根節點的子節點(同時也是元素節點):

實例

txt = "";
x = xmlDoc.documentElement.childNodes;
for (i = 0; i <x.length; i++) {
  // Process only element nodes (type 1)
  if (x[i].nodeType == 1) {
    txt += x[i].nodeName + "<br>";
  }
}

親自試一試

例子解釋:

  1. 假設您已將 "books.xml" 加載到 xmlDoc
  2. 獲取根元素(xmlDoc)的子節點
  3. 檢查每個子節點的節點類型。如果節點類型為 "1",則是元素節點
  4. 如果是元素節點,則輸出節點名稱

導航節點關系

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

實例

x = xmlDoc.getElementsByTagName("book")[0];
xlen = x.childNodes.length;
y = x.firstChild;
txt = "";
for (i = 0; i <xlen; i++) {
  // 只處理元素節點(類型 1)
  if (y.nodeType == 1) {
    txt += y.nodeName + "<br>";
  }
  y = y.nextSibling;
}

親自試一試

例子解釋:

  1. 假設您已將 "books.xml" 加載到 xmlDoc
  2. 獲取第一個 book 元素的子節點
  3. 將 "y" 變量設置為第一個 book 元素的第一個子節點
  4. 對于每個子節點(從第一個子節點 "y" 開始):
  5. 檢查每個子節點的節點類型。如果節點類型為 "1",則它是元素節點
  6. 如果是元素節點,則輸出該節點的名稱
  7. 將 "y" 變量設置為下一個同級節點,并再次運行循環