XML 树
XML 树结构
Section titled “XML 树结构”XML 文档本质上是分层的,形成树状结构。理解这种结构是使用 XML 的基础。
一个 XML 文档示例
Section titled “一个 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>分解:
- XML 声明:
<?xml version="1.0" encoding="UTF-8"?>(可选但推荐)指定 XML 版本和字符编码。 - 根元素:
<note>这是包围整个文档内容的顶层元素。每个格式良好的 XML 文档必须且只能有一个根元素。 - 子元素:
<to>、<from>、<heading>和<body>是<note>元素的直接子元素。 - 文本内容: “Tove”、“Jani”、“Reminder”和“Don’t forget me this weekend!”是位于各自父元素内的文本内容。
XML 的语法使用描述性标签,使得文档相对自解释。
XML 文档构成一棵树
Section titled “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 数据的关键。