XPath的轴

http://www.cnblogs.com/gakusei/articles/1582152.html

我们以一个表格来给出XPath中有效的轴。这些轴描述了XPath数据模型中的各个节点与上下文节点(context node)的关系。

XPath的轴
名称描述
self上下文节点自身
parent上下文节点的父节点,如果存在父节点的话
child上下文节点的所有子节点,不包括属性节点和命名空间节点
ancestor上下文节点的父节点,祖父节点,...,直到文档根节点,文档根节点的ancestor轴为空节点集
ancestor-or-self和ancestor相同,只是包括了上下文节点本身
descendant上下文节点的所有子节点,孙节点,...,不包括属性节点和命名空间节点
descendant-or-self和descendant相同,只是包括了上下文节点
preceding上下文节点之前的所有节点,不包括祖先节点、属性节点和命名空间节点
preceding-sibling上下文节点之前的所有兄弟节点,如果上下文节点为属性节点或命名空间节点则此轴为空
following上下文节点之后的所有节点,不包括后代节点、属性节点和命名空间节点
following-sibling上下文节点之后的所有兄弟节点,如果上下文节点为属性节点或命名空间节点则此轴为空
namespace上下文节点的命名空间节点
attribute上下文节点的所有属性节点

每一个轴都有一个基本节点类型(principal node type)。如果一个轴能够包含元素(element)那么该轴的基本节点类型就是元素。其它情况下,轴的基本节点类型就是轴能够包含的节点的类型。因此,有

  • 属性轴(attribute axis)的基本节点类型是属性(attribute)
  • 命名空间轴(namespace axis)的基本节点类型是命名空间(namespace)
  • 其它轴的基本节点类型是元素(element)

这里的基本节点类型的概念在做节点测试(Node Tests)时还要用到,我到时会重再次提到它。

如果忽略属性和命名空间节点,那么ancestor,descendant,following,preceding以及self这5个轴切分整个XML文档。

最后用张图来加强一下对轴的印象,其中的红色线条表示元素节点,蓝色线条表示文本节点、注释节点与处理指令节点(图中没有出现)。

位置路径表达式

位置路径可以是绝对的,也可以是相对的。绝对路径起始于正斜杠( / ),而相对路径不会这样。在两种情况中,位置路径均包括一个或多个步,每个步均被斜杠分割:

绝对位置路径:

/step/step/...

相对位置路径:

step/step/...

每个步均根据当前节点集之中的节点来进行计算。
步(step)包括:
轴(axis)    定义所选节点与当前节点之间的树关系
节点测试(node-test)  识别某个轴内部的节点
零个或者更多谓语(predicate) 更深入地提炼所选的节点集 ---用[]包括起来

步的语法:
轴名称::节点测试[谓语]
实例

例子结果
child::book选取所有属于当前节点的子元素的 book 节点
attribute::lang选取当前节点的 lang 属性
child::*选取当前节点的所有子元素
attribute::*选取当前节点的所有属性
child::text()选取当前节点的所有文本子节点
child::node()选取当前节点的所有子节点
descendant::book选取当前节点的所有 book 后代
ancestor::book选择当前节点的所有 book 先辈
ancestor-or-self::book选取当前节点的所有book先辈以及当前节点(假如此节点是book节点的话)
child::*/child::price选取当前节点的所有 price 孙子--节点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值