参考资料

  1. XPath 节点关系
  2. XPath 谓语(Predicates)
  3. 正则表达式语法速查
  4. XPath 基本语法
  5. XPath 路径表达式
  6. XPath 在 XSLT 中使用
  7. XPath 选取若干路径
  8. xpath路径如何查找

XPath 节点关系

1. 父节点(Parent)

  • 定义:每个元素或属性都有一个父节点。

  • 属性parent:: 轴或 /.. 简写。

  • 用法:选择当前节点的直接父节点。

  • 示例

    //book/..  <!-- 选择所有book元素的父节点 -->

2. 子节点(Children)

  • 定义:直接位于某节点下的元素。

  • 属性:直接使用 /child:: 轴。

  • 用法:选择当前节点的直接子节点。

  • 示例

    //bookstore/book  <!-- 选择bookstore的所有book子元素 -->

3. 兄弟节点(Sibling)

  • 定义:拥有相同父节点的节点。

  • 属性following-sibling::preceding-sibling:: 轴。

  • 用法:选择同级的前驱或后继节点。

  • 示例

    //book/following-sibling::book  <!-- 选择book之后的所有兄弟book节点 -->

4. 祖先节点(Ancestor)

  • 定义:从当前节点到根节点的所有上级节点。

  • 属性ancestor:: 轴。

  • 用法:选择所有祖先节点。

  • 示例

    //book/ancestor::bookstore  <!-- 选择book的所有bookstore祖先 -->

5. 后代节点(Descendant)

  • 定义:当前节点下的所有子节点、孙节点等。

  • 属性descendant:: 轴或 // 简写。

  • 用法:选择所有后代节点。

  • 示例

    //bookstore//title  <!-- 选择bookstore下所有层级的title元素 -->

6. 属性节点(Attribute)

  • 定义:元素的属性。

  • 属性attribute:: 轴或 @ 简写。

  • 用法:选择元素的属性。

  • 示例

    //book/@lang  <!-- 选择所有book元素的lang属性 -->

7. 自身节点(Self)

  • 定义:当前节点自身。

  • 属性self:: 轴或 . 简写。

  • 用法:选择当前节点。

  • 示例

    //book/self::node()  <!-- 选择所有book节点自身 -->

8. 命名空间节点(Namespace)

  • 定义:XML命名空间。

  • 属性namespace:: 轴。

  • 用法:选择命名空间节点(较少使用)。

  • 示例

    //book/namespace::*  <!-- 选择book元素的命名空间节点 -->

综合示例

假设XML结构如下:

<bookstore>
  <book lang="en">
    <title>XPath Guide</title>
    <author>John</author>
  </book>
  <book lang="fr">
    <title>XML Basics</title>
    <price>30</price>
  </book>
</bookstore>
  • 选择所有title的父节点:

    //title/..
  • 选择第一个book的后继兄弟:

    //book[1]/following-sibling::book
  • 选择author的所有祖先:

    //author/ancestor::*