-
定位步骤
定位步骤相对于上下文节点选择一组节点(节点集)。
定位步骤分为三个部分:可选轴、节点测试和可选谓词 。定位步骤的语法是轴名后接双冒号,然后接节点测试,最后是零个或多个谓词(每个谓词都放在方括 号中) 。此语法的最基本形式如下所示:
axis::nodetest[predicate]
-
axis
-
指定上下文节点与定位步骤所选的节点之间的树型关系 。也就是说,轴指示定位步骤从上下文节点开始的常规方向。在定位步骤中,轴是可选项。如果省略,轴默认为 child:: 。另外,有几个轴具有快捷方式;例如“and”符 (@ ) 是属性轴的快捷方式。
-
nodetest
-
指定定位步骤最初选择的节点的节点类型或扩展名称 。基本上,节点测试指示将指定轴上的所有节点中哪些节点视为定位步骤的候选(即潜在)匹配项。
-
predicate
-
使用 XPath 表达式(要满足的条件)进一步精选定位步骤所选的节点集 。谓词是一个过滤器,通过指定选择标准来进一步精选候选节点列表。谓词是可选项。如果没有谓词,定位步骤中就没有方括号 ([ ] )。
选择节点
根据轴和节点测试之间的关系生成初始节点集,然后依次通过每个谓词筛选该初始节点集,从而确定定位步骤所选的节点集。
初始节点集由满足下列两个条件的节点组成:
-
节点与轴指定的上下文节点有关系。
-
节点具有节点测试指定的节点类型和扩展名称。
XPath 使用定位步骤中的第一个谓词筛选初始节点集,以生成新的节点集。然后,XPath 使用第二个谓词筛选第一个谓词生成的节点集。此筛选过程重复进行,直到 XPath 计算完所有谓词 。应用了所有谓词之后生成的节点集就是定位步骤所选的节点集。
有些使用完整语法的示例定位步骤如下表所示。
定位步骤 | 说明 |
---|---|
child::*[position()=1] | 定位上下文节点的第一个子节点。 |
ancestor-or-self::book[@catdate="2000-12-31"] | 定位上下文节点的任何 <book> 子级的所有上级以及 <book> 子级本身,只要相应的元素的 catdate 属性值为 "2000-12-31" 。 |
//parent::node()[name()="book"] | descendant::node()[name()="author"] | 定位文档中任何父节点名为“book”的节点(意思是说只要某个节点下还有子节点,当然该节点的名字为book的才行)或任何从名为 “author”的上下文节点下降的节点。 |