上一篇介紹了XML如何載入到JavaScript解析器。
這一篇介紹載入到解析器後,JavaScript是如何訪問節點的。
在詳細介紹如何使用上面的方法前,我們來瞭解一下節點的主要屬性。
documentElement 屬性:XML 文檔的根節點。
nodeName 屬性:節點的名稱(唯讀)。
nodeValue 屬性:節點的值。
nodeType 屬性:節點的類型。
childNodes 屬性:返回子節點集合。
parentNode 屬性:返回父節點。
firstChild 屬性:返回第一個子節點。
lastChild 屬性:返回最後一個子節點。
nextSibling 屬性:返回下一個子節點。
previousSibling 屬性:返回上一個子節點。
nodeName 屬性
nodeName 屬性規定節點的名稱。
- nodeName 是唯讀
- 元素節點的 nodeName 與標籤名相同
- 屬性節點的 nodeName 是屬性的名稱
- 文本節點的 nodeName 永遠是 #text
- 文檔節點的 nodeName 永遠是 #document
nodeValue 屬性
nodeValue 屬性規定節點的值。
- 元素節點的 nodeValue 是 undefined
- 文本節點的 nodeValue 是文本自身
- 屬性節點的 nodeValue 是屬性的值
nodeType 屬性
nodeType 屬性規定節點的類型。
nodeType 是唯讀。
最重要的節點類型是:
元素類型 |
節點類型 |
元素 |
1 |
屬性 |
2 |
文本 |
3 |
注釋 |
8 |
文檔 |
9 |
您可以通過四種方法來訪問節點:
1、通過getElementsById() 方法。
用法: var xNode = xmlDoc.getElementsById('ID') ;
解釋:這個方法我想大家已經很熟悉了。就是如果XML裡有個id='ID'的Node,那個就返回這個Node節點,否則返回null。
在得到這個Node後,就可以用上面的屬性進行訪問了。
ps: xmlDoc的定義可以在上一篇文章中找到。
2、通過getElementsByTagName() 方法。
用法:var arrNodes=xmlDoc.getElementsByTagName('TagName') ;
解釋:這個方法是根據tagname返回一個數組。此方法最常用。
例子1:
//xml 內容: http://blog.csdn.net/avon520/archive/2008/11/20/3340927.aspx
var arrNodes=xmlDoc.getElementsByTagName("title");
for (i=0;i<arrNodes.length;i++)
{
alert(arrNodes[i].childNodes[0].nodeValue);
}
例子2:
// 擷取第一個 <title> 元素節點的文本節點。注意,元素內的文本是元素的子節點,叫文本節點。
var xNode=xmlDoc.getElementsByTagName("title")[0].childNodes[0];
alert(xNode.nodeValue); // 文本節點的值 。output "Everyday Italian"
3、通過迴圈(遍曆)節點樹。
這個方法沒什麼好說的,就是用for迴圈結合childNodes遍曆所以的節點。
例子:
x=xmlDoc.documentElement.childNodes;
for (i=0;i<x.length;i++)//只遍曆了一層
{
document.write(x[i].nodeName);
document.write("<br />");
}
4、通過節點的關係在節點樹中導航。
這個方法是根據當前節點得到parentNode 、firstChild、lastChild、nextSibling 、previousSibling 來移動。
x=xmlDoc.getElementsByTagName("book")[0].childNodes;
y=xmlDoc.getElementsByTagName("book")[0].firstChild;
for (i=0;i<x.length;i++)
{
document.write(y.nodeName + "<br />");
y=y.nextSibling;
}