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>"; } }
例子解释:
- 假设您已将 "books.xml" 加载到
xmlDoc
- 获取根元素(xmlDoc)的子节点
- 检查每个子节点的节点类型。如果节点类型为 "
1
",则是元素节点 - 如果是元素节点,则输出节点名称
导航节点关系
下面的代码通过利用节点的关系在节点树中进行导航:
实例
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; }
例子解释:
- 假设您已将 "books.xml" 加载到
xmlDoc
- 获取第一个 book 元素的子节点
- 将 "y" 变量设置为第一个 book 元素的第一个子节点
- 对于每个子节点(从第一个子节点 "
y
" 开始): - 检查每个子节点的节点类型。如果节点类型为 "
1
",则它是元素节点 - 如果是元素节点,则输出该节点的名称
- 将 "
y
" 变量设置为下一个同级节点,并再次运行循环