XPath的轴

来源:互联网 发布:在端口8080连接失败 编辑:程序博客网 时间:2024/04/29 10:20

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 孙子--节点。

原创粉丝点击