# Xpath

# 节点

# 节点类型

节点 (node),为 XML 文件的最小构成单位,分为七种:

  • element(元素节点):通常包含一个开始标签、一个结束标签,以及位于这两个标签之间的内容,这些内容可以是文本、其他元素或属性
  • attribute(属性节点):属性节点是与元素节点相关联的节点,它定义了元素的附加信息。属性节点包含了一个键(名称)和一个值
  • text(文本节点):文本节点是包含实际文本内容的节点。它是元素节点的子节点
  • namespace(命名空间节点):命名空间节点不是一个独立的节点类型,而是一种使用命名空间来避免元素和属性名称冲突的机制
  • processing-instruction(处理指令节点):提供了关于如何处理文档的信息给应用程序。处理指令通常包含两部分:一个目标(通常是处理该指令的程序或处理器的名称)和一些将被处理的指令数据。
  • comment(注释节点):用于在文档中添加注释,注释节点在 XML 文档中以 <!-- 开头,以 --> 结尾。
  • root(根节点)(又称文档节点):最顶层的元素节点

一段示例 XML 文本

<?xml version="1.0" encoding="UTF-8"?>
<!-- 这是一个注释 -->
<bookstore xmlns:bk="http://www.example.com/books">
    <book id="b1">
        <title lang="en">Harry Potter</title>
        <author>J.K. Rowling</author>
        <price>29.99</price>
        <bk:publishDate>2000-07-08</bk:publishDate>
    </book>
    <?display book="b1"?>
</bookstore>
  • <!-- 这是一个注释 --> 是注释节点
  • <bookstore> 是文档(根)节点
  • <book id="b1"> 是元素节点,其中 id 是属性节点
  • <title lang="en">Harry Potter</title> 中, Harry Potter 是文本节点, lang="en" 是属性节点,其中 lang 为属性名, "en" 为属性值
  • <author>J.K. Rowling</author> 是元素节点, J.K. Rowling 是文本节点
  • xmlns:bk="http://www.example.com/books" 是命名空间节点,定义了一个命名空间
  • <?display book="b1"?> 是处理指令节点

# 基本值 & 项目

  • 基本值:元素标签之间的数据,不包含任何子元素或属性,无父或无子的节点,如 J.K. Rowling
  • 项目:基本值或者节点

# 节点关系

参考文本

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
  <book>
    <title lang="en">Harry Potter</title>
    <author>J K. Rowling</author>
    <year>2005</year>
    <price>29.99</price>
  </book>
</bookstore>

# 父(Parent)

除根节点外,每个元素都有父

在参考文本中:

  • book 元素是 title、author、year、price 元素的父
  • bookstore 元素是 book 元素的父

# 子(Children)

元素节点可有零个、一个或多个子

在参考文本中:

  • title、author、year、price 元素是 book 元素的子
  • book 元素是 bookstore 元素的子

# 同胞(Sibling)

拥有相同的父的节点

在参考文本中:

  • title、author、year、price 元素彼此是同胞

# 先辈(Ancestor)

某节点的父、父的父,等等

在参考文本中:

  • title 元素的先辈是 book 元素和 bookstore 元素

# 后代(Descendant)

某个节点的子,子的子,等等

在参考文本中:

  • bookstore 的后代是 booktitle、author、year、price 元素

# 语法

需部分了解 html