Skip to content

XML 树

XML 文档本质上是分层的,形成树状结构。理解这种结构是使用 XML 的基础。

让我们回顾一个简单的 XML 文档:

<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>

分解:

  1. XML 声明: <?xml version="1.0" encoding="UTF-8"?>(可选但推荐)指定 XML 版本和字符编码。
  2. 根元素: <note> 这是包围整个文档内容的顶层元素。每个格式良好的 XML 文档必须且只能有一个根元素。
  3. 子元素: <to>、<from>、<heading> 和 <body> 是 <note> 元素的直接子元素。
  4. 文本内容: “Tove”、“Jani”、“Reminder”和“Don’t forget me this weekend!”是位于各自父元素内的文本内容。

XML 的语法使用描述性标签,使得文档相对自解释。

可以将 XML 文档想象成一棵倒置的家谱或文件系统目录结构:

  • 根 (Root): 单个顶层元素(例如 <note> 或 <bookstore>)是树的根。
  • 节点 (Nodes): 文档的每个部分——元素、属性、文本——都被视为树中的一个节点。
  • 父/子关系 (Parent/Child Relationship): 直接包含另一个元素的元素是其父元素(例如 <note> 是 <to> 的父元素)。被包含的元素是子元素。
  • 同级元素 (Siblings): 共享同一个父元素的元素是同级元素(例如 <to>、<from>、<heading> 和 <body> 是同级元素)。
  • 祖先/后代 (Ancestors/Descendants): 父元素、祖父元素等是祖先。子元素、孙子元素等是后代。
  • 叶节点 (Leaves): 没有子节点的节点(如文本节点或空元素)通常被称为树的叶节点。

这个树模型至关重要,因为 XML 处理工具(如解析器、XSLT 处理器、DOM API)是基于遍历此结构进行操作的。

考虑这个稍微复杂一些的示例:

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price currency="USD">30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price currency="USD">29.99</price>
</book>
</bookstore>

可视化树状结构:

(Root) bookstore
|
+-- book (category="COOKING")
| |
| +-- title (lang="en")
| | +-- "Everyday Italian"
| |
| +-- author
| | +-- "Giada De Laurentiis"
| |
| +-- year
| | +-- "2005"
| |
| +-- price (currency="USD")
| +-- "30.00"
|
+-- book (category="CHILDREN")
|
+-- title (lang="en")
| +-- "Harry Potter"
|
+-- author
| +-- "J K. Rowling"
|
+-- year
| +-- "2005"
|
+-- price (currency="USD")
+-- "29.99"

在这棵树中:

  • <bookstore> 是根元素。
  • 两个 <book> 元素是 <bookstore> 的子元素,也是彼此的同级元素。
  • <title>、<author>、<year> 和 <price> 是它们各自 <book> 父元素的子元素。
  • category、lang 和 currency 是属性节点,与各自的元素(book、title、price)关联。
  • “Everyday Italian”或“2005”等文本是文本节点,是它们各自元素(title、year)的子节点。

理解这些关系(父、子、同级、属性、文本内容)是有效查询和操作 XML 数据的关键。