XPath Axes(轴)

  • 定义和使用

    在下面的示例中,我们将使用以下 XML 文档。
    <?xml version="1.0" encoding="UTF-8"?>
    <bookstore>
      <book>
        <title lang="en">中国历史手册</title>
        <price>30.00</price>
      </book>
      <book>
        <title lang="en">学习 XML</title>
        <price>39.99</price>
      </book> 
    </bookstore>
    轴定义相对于当前节点的节点集。
    轴名 描述
    ancestor 选择当前节点的所有祖先(父,祖父母等)
    ancestor-or-self 选择当前节点的所有祖先(父,祖父母等)和当前节点本身
    attribute 选择当前节点的所有属性
    child 选择当前节点的所有子节点
    descendant 选择当前节点的所有后代(子代,孙代等)
    descendant-or-self 选择当前节点的所有后代(子代,孙代等)和当前节点本身
    following 在当前节点的结束标记之后选择文档中的所有内容
    following-sibling 选择当前节点之后的所有同级
    namespace 选择当前节点的所有名称空间节点
    parent 选择当前节点的父节点
    preceding 选择出现在文档中当前节点之前的所有节点,但祖先,属性节点和名称空间节点除外
    preceding-sibling 选择当前节点之前的所有同级
    self 选择当前节点
  • 位置路径表达

    位置路径可以是绝对路径,也可以是相对路径。
    绝对位置路径以斜杠(/)开头,而相对位置路径则不是。 在这两种情况下,位置路径都包含一个或多个步骤,每个步骤之间都用斜杠分隔:
    绝对位置路径:
    
    /step/step/...
    
    相对位置路径:
    
    step/step/...
    针对当前节点集中的节点评估每个步骤。
    步骤包括:
    • 轴(定义所选节点和当前节点之间的树关系)
    • 节点测试(标识轴内的节点)
    • 零个或多个谓词(以进一步优化所选节点集)
    定位步骤的语法为:
    axisname::nodetest[predicate]

    示例

    示例 描述
    child::book 选择属于当前节点的所有子书节点
    attribute::lang 选择当前节点的lang属性
    child::* 选择当前节点的所有元素子级
    attribute::* 选择当前节点的所有属性
    child::text() 选择当前节点的所有文本节点子级
    child::node() 选择当前节点的所有子节点
    descendant::book 选择当前节点的所有后代
    ancestor::book 选择当前节点的所有账簿祖先
    ancestor-or-self::book 选择当前节点的所有书祖-如果当前是书节点,则选择当前书
    child::*/child::price 选择当前节点的所有价格子孙