XML DOM 节点

根据 XML DOM,XML 文档中的所有内容都是节点

  • 整个文档就是一个文档节点
  • 每个 XML 元素都是一个元素节点
  • XML 元素中的文本是文本节点
  • 每个属性都是一个属性节点
  • 注释属于注释节点

DOM Example

请看以下 XML 文件 (books.xml):

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>

<book category="美食">
  <title lang="zh">雅舍谈吃</title>
  <author>梁实秋</author>
  <press>江苏文艺出版社</press>
  <year>2013</year>
  <price>35</price>
  <ISBN>9787539962771</ISBN>
</book>

<book category="儿童">
  <title lang="zh">了不起的狐狸爸爸</title>
  <author>罗尔德·达尔</author>
  <translator>代维</translator>
  <press>明天出版社</press>
  <year>2009</year>
  <price>10</price>
  <ISBN>9787533259563</ISBN>
</book>

<book category="文学">
  <title lang="zh">将熟悉变为陌生</title>
  <author>齐格蒙·鲍曼</author>
  <author>彼得·哈夫纳</author>
  <translator>王立秋</translator>
  <press>南京大学出版社</press>
  <year>2023</year>
  <price>68</price>
  <ISBN>9787305269387</ISBN>
</book>

<book category="科学">
  <title lang="zh">你想飞吗,像鸟一样?</title>
  <author>理查德·道金斯</author>
  <author>亚娜·伦佐娃</author>
  <translator>高天羽</translator>
  <press>湖南科学技术出版社</press>
  <year>2023</year>
  <price>88</price>
  <ISBN>9787571019075</ISBN>
</book>

<book category="政治" cover="平装">
  <title lang="zh">论美国的民主</title>
  <author>托克维尔</author>
  <translator>董果良</translator>
  <press>商务印书馆</press>
  <year>1989</year>
  <price>60</price>
  <ISBN>9787100124553</ISBN>
</book>

</bookstore>

在上面的 XML 中,根节点是 <bookstore>。

文档中的所有其他节点都被包含在 <bookstore> 中。

根节点 <bookstore> 拥有 5 个 <book> 节点。

第一个 <book> 节点包含 6 个子节点:<title>、<author>、<press>、<year>、<price> 和 <ISBN>。

其中的每个子节点都包含一个文本节点:

  • “雅舍谈吃”
  • “梁实秋”
  • “江苏文艺出版社”
  • “2012”
  • “48.00”
  • “9787100011105”

文本始终存储在文本节点中

在 DOM 处理中一个普遍的错误是,认为元素节点包含文本。

然而,元素节点的文本存储在文本节点中。

在这个例子中:<year>2013</year>,元素节点 <year> 包含值为 "2012" 的文本节点。

"2012" 不是 <year> 元素的值!

XML DOM 节点树

XML DOM 把 XML 文档视为一种树结构。这种树结构被称为节点树

可通过这棵树访问所有节点。可以修改或删除它们的内容,也可以创建新的元素。

这颗节点树展示了节点的集合,以及它们之间的联系。这棵树从根节点开始,然后在树的最低层级向文本节点长出枝条:

DOM 节点树

上图表示 XML 文件 books.xml

父、子和同胞节点

节点树中的节点彼此之间都有等级关系。

术语“父”、“子”和“同胞”用于描述这种关系。父节点有子节点。位于相同层级上的子节点称为同级节点或同胞节点(兄弟或姐妹)。

  • 在节点树中,顶部节点称为根
  • 除根节点外,每个节点都只有一个父节点
  • 节点可以有任意数量的子节点
  • 叶子是没有子节点的节点
  • 同胞节点是拥有相同父节点的节点

下图展示了节点树的一部分,以及节点之间的关系:

DOM 节点树

因为 XML 数据是按照树的形式进行构造的,所以可以在不了解树的确切结构且不了解其中包含的数据类型的情况下,对其进行遍历。

您将在本教程稍后的章节学习更多有关遍历节点树的知识。

注释:父节点:Parent Node,子节点:Children Node,同级节点:Sibling Node。

第一个子节点 - 最后一个子节点

请查看以下 XML 片段:

<bookstore>
  <book category="美食">
    <title lang="zh">雅舍谈吃</title>
    <author>梁实秋</author>
	<press>江苏文艺出版社</press>
    <year>2013</year>
    <price>35</price>
	<ISBN>9787100011105</ISBN>
  </book>
</bookstore>

在上面的 XML 中,<title> 元素是 <book> 元素的第一个子节点,<ISBN> 元素是 <book> 元素的最后一个子节点。

此外,<book> 元素是 <title>、<author>、<year>、<press>、<price> 和 <ISBN> 元素的父节点。