XML DOM 教學課程login
XML DOM 教學課程
作者:php.cn  更新時間:2022-04-13 15:27:56

DOM 訪問


XML DOM - 存取節點


透過 DOM,您能夠存取 XML 文件中的每個節點。



tryitimg.gif  嘗試 - 實例


下面的實例使用 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() 方法傳回節點清單。節點列表是節點的陣列。

下面的程式碼使用loadXMLDoc() 把"books.xml" 載入xmlDoc 中,然後在變數x 中儲存<title> 節點的一個列表:

xmlDoc= loadXMLDoc("books.xml");

x=xmlDoc.getElementsByTagName("title");
可透過索引號碼存取x 中的<title> 元素。如需造訪第三個 <title>,您可以撰寫:

y=x[2];

注意:該索引從 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>

執行實例»

點擊"運行實例" 按鈕查看線上實例

實例解釋:

  1. #使用loadXMLDoc() 把"books.xml" 載入xmlDoc 中

  2. 取得所有<title> 元素節點

  3. #輸出每個<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>

運行實例»

點擊"運行實例"按鈕查看線上實例

實例解釋:

  1. 使用loadXMLDoc() 把"books.xml" 載入xmlDoc 中

  2. 取得根元素的子節點

  3. #檢查每個子節點的節點類型。如果節點類型是"1",則是元素節點

  4. 如果是元素節點,則輸出節點的名稱


導航節點的關係

下面的程式碼使用節點關係導航節點樹:

實例

<!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>

##執行實例»點擊"運行實例" 按鈕查看線上實例

  1. 使用loadXMLDoc() 把"books.xml" 載入xmlDoc 中

  2. #取得第一個book 元素的子節點

  3. 把"y" 變數設定為第一個book 元素的第一個子節點

  4. #對於每個子節點(第一個子節點從"y" 開始),檢查節點類型,如果節點類型為"1",則是元素節點

  5. 如果是元素節點,則輸出該節點的名稱

  6. 把"y" 變數設定為下一個同級節點,並再次執行迴圈