遍历节点树(Traversing the Node Tree)是操作 XML DOM 的核心任务之一。在一个 XML 文档中,所有元素、属性、文本内容都会被 DOM 构建成一棵“树”状结构。理解并掌握如何遍历这棵节点树,对于读取、分析和修改 XML 内容非常关键。


目录

  1. 什么是 DOM 节点树
  2. 节点类型回顾
  3. 遍历节点树的常用方法
  4. 递归遍历示例
  5. 实用示例代码
  6. 注意事项
  7. 参考资料与出站链接

1. 什么是 DOM 节点树?

在 XML DOM 中,每一个文档都被表示为一个由节点(Node)组成的层级树结构:

Document
 └── Root Element(如 <books>)
      ├── <book>
      │    ├── <title>
      │    └── <author>
      └── <book> ...

每一个节点都有可能拥有子节点,形成父子结构。这种结构使得你可以从任意节点向下逐层访问子内容,或向上访问其父节点。


2. 节点类型回顾(常见类型)

节点类型nodeType描述
元素节点1所有 XML 标签元素
属性节点2所有 XML 属性
文本节点3标签之间的文本内容
注释节点8<!-- 注释 --> 类型内容

3. 遍历节点树的常用方法

方法说明
node.childNodes获取所有子节点(包括文本)
node.firstChild第一个子节点
node.lastChild最后一个子节点
node.parentNode父节点
node.nextSibling下一个兄弟节点
node.previousSibling上一个兄弟节点

4. 递归遍历示例

使用递归是遍历 XML DOM 节点树最常见的方式之一:

function traverseNodes(node) {
  if (node.nodeType === 1) { // 只处理元素节点
    console.log("元素节点:", node.nodeName);
  }
  // 遍历所有子节点
  for (var i = 0; i < node.childNodes.length; i++) {
    traverseNodes(node.childNodes[i]);
  }
}

调用方式:

traverseNodes(xmlDoc.documentElement);


5. 实用示例代码

示例 XML:

<library>
  <book>
    <title>XML for Beginners</title>
    <author>Alice</author>
  </book>
  <book>
    <title>DOM Deep Dive</title>
    <author>Bob</author>
  </book>
</library>

JavaScript 遍历:

function traverseNodes(node, indent = "") {
  if (node.nodeType === 1) {
    console.log(indent + "<" + node.nodeName + ">");
  } else if (node.nodeType === 3 && node.nodeValue.trim()) {
    console.log(indent + node.nodeValue.trim());
  }
  for (let i = 0; i < node.childNodes.length; i++) {
    traverseNodes(node.childNodes[i], indent + "  ");
  }
}

traverseNodes(xmlDoc.documentElement);

输出:

<library>
  <book>
    <title>
      XML for Beginners
    <author>
      Alice
  <book>
    <title>
      DOM Deep Dive
    <author>
      Bob


6. 注意事项

  • .childNodes 会返回所有类型的子节点,包括文本节点(空格、换行也算),建议使用 nodeType 过滤。
  • 若只需访问元素节点,可考虑使用 children 属性(只包含元素节点)。
  • 递归遍历时注意避免死循环,应避免访问 .parentNode 造成向上遍历。

7. 参考资料与出站链接


通过遍历 XML 节点树,你可以自由访问和处理文档的任何部分,这是构建 XML 解析器、提取器和转换器的基础能力。