定位步骤

定位步骤相对于上下文节点选择一组节点(节点集)。

定位步骤有三个部分:可选轴、节点测试和可选谓词。 定位步骤的语法是轴名后接双冒号,然后接节点测试,最后是零个或多个谓词(每个谓词都放在方括号中)。 此语法的最基本形式如下所示:

axis::nodetest[predicate]
  • axis
    指定上下文节点与定位步骤所选的节点之间的树型关系。 也就是说,轴指示定位步骤从上下文节点开始的常规方向。 在定位步骤中,轴是可选项。 如果省略,轴默认为 child::。 另外,有几个轴具有快捷方式;例如“and”符 (@) 是属性轴的快捷方式。
  • nodetest
    指定定位步骤最初选择的节点的节点类型或扩展名称。 基本上,节点测试指示将指定轴上的所有节点中哪些节点视为定位步骤的候选(即潜在)匹配项。
  • predicate
    使用 XPath 表达式(要满足的条件)进一步精选定位步骤所选的节点集。 谓词是一个过滤器,通过指定选择标准来进一步精选候选节点列表。 谓词是可选项。 如果没有谓词,定位步骤中就没有方括号 ([ and ])。

选择节点

根据轴和节点测试之间的关系生成初始节点集,然后依次通过每个谓词筛选该初始节点集,从而确定定位步骤所选的节点集。

初始节点集由满足下列两个条件的节点组成:

  • 节点与轴指定的上下文节点有关系。

  • 节点具有节点测试指定的节点类型和扩展名称。

XPath 使用定位步骤中的第一个谓词筛选初始节点集,以生成新的节点集。 然后,XPath 使用第二个谓词筛选第一个谓词生成的节点集。 此筛选过程重复进行,直到 XPath 计算完所有谓词。 应用了所有谓词之后生成的节点集就是定位步骤所选的节点集。

ms256472.note(zh-cn,VS.100).gif注意:
因为轴影响每个谓词中的表达式的计算,谓词的语义相对指定轴定义。

有些使用完整语法的示例定位步骤如下表所示。

定位步骤 说明

child::*[position()=1]

定位上下文节点的第一个子节点。

ancestor-or-self::book[@catdate="2000-12-31"]

只要涉及的元素具有带 "2000-12-31" 值的 catdate 属性,便定位上下文节点的任何 <book> 子级的上级以及 <book> 子级本身。

//parent::node()[name()="book"] | descendant::node()[name()="author"]

定位文档中任何父节点名为“book”的节点或任何从名为“author”的上下文节点下降的节点。

另请参见

参考


节点测试
谓词