association

XPath定位路径

Previous Next

一个定位路径表达式返回一个节点集。


定位路径表达式

一个定位路径可以是绝对的或相对的。

绝对定位路径以一个斜线(/)开头,而相对定位路径没有。两种情况下,定位路径由一个或多个定位步骤组成,每个步骤由一个斜线分隔:

一个绝对定位路径:
/step/step/...
一个相对定位路径:
step/step/...

定位步骤从左到右,依次按顺序计算。每个步骤根据当前节点集的节点计算。如果定位路径是绝对的,那么当前节点集包含根节点。如果定位路径是相对的,那么当前节点集包含使用表达式的节点。定位步骤包括:

  • 一个轴(指定当前定位步骤和当前节点选择的节点间的树关系)
  • 一个节点测试(指定定位步骤选择的节点的节点类型和扩展名)
  • 零或多个预测(使用表达式进一步抽取定位步骤选定的节点集)

一个定位步骤的语法为:

轴名::节点测试[预测]

示例:

child::price[price=9.90]


轴和节点测试

一个轴定义相对于当前节点的节点集。节点测试用于识别轴内的一个节点。我们可以通过名或类型来执行一个节点测试。

轴名 描述
ancestor

包含当前节点的所有祖先节点

注意: 除非当前节点是根节点,否则这个轴始终包括根节点

ancestor-or-self 包括当前节点和所有当前节点的祖先节点
attribute 包含当前节点所有的属性
child 包含当前节点所有的子节点
descendant

包含当前节点的所有后代节点

注意:这个轴不包括属性或命名空间节点

descendant-or-self 包含当前节点本身和所有它的后代节点
following 包含文档中当前节点的结束标记后所有节点
following-sibling 包含当前节点后所有的同层节点

注意: 如果当前节点是属性节点或命名空间节点,那么这个轴为空

namespace 包含当前节点的所有命名空间节点
parent 包含当前节点的所有父节点
preceding 包含文档中当前节点的开始标记之前的所有节点
preceding-sibling 包含当前节点之前的所有同层节点

注意: 如果当前节点是一个属性节点或者命名空间节点,那么这个轴为空

self 当前节点本身

示例

示例 结果
child::cd 选择当前节点的子节点中所有的cd元素(如果当前节点没有cd子节点,那么将返回一个空节点集)
attribute::src 选择当前节点的src属性(如果当前节点没有src属性,那么返回一个空节点集)
child::* 选择当前节点的所有子元素
attribute::* 选择当前节点的所有属性
child::text() 选择当前节点的文本节点子节点
child::node() 选择当前节点的所有子节点
descendant::cd 选择当前节点的后代中所有cd元素
ancestor::cd 选择当前节点的祖先节点中所有cd元素
ancestor-or-self::cd 选择当前节点的祖先节点中所有cd元素,如果当前节点是一个cd元素,那么也包括当前节点
child::*/child::price

选择当前节点的孙子节点中所有price元素

/ 选择文档根


预测

一个预测过滤一个节点集为一个新的节点集。预测放在方括号([])中。

示例

示例 结果
child::price[price=9.90] 选择当前节点的子节点中price元素等于9.90的所有价格元素
child::cd[position()=1] 选择当前节点的第一个cd子元素
child::cd[position()=last()] 选择当前节点的最后一个cd子元素
child::cd[position()=last()-1] 选择当前节点的倒第二个cd元素
child::cd[position()<6] 选择当前节点的前五个cd元素
/descendant::cd[position()=7] 选择文档中第七个cd元素
child::cd[attribute::type="classic"] 选择当前节点的所有type属性等于classic的cd子节点


定位路径缩写语法

定位路径可以用缩写表示。

最重要的缩写为:child::可以从一个定位步骤中省略。

缩写 含义 示例
none child:: cd是child::cd的简写
@ attribute:: cd[@type="classic"]是child::cd[attribute::type="classic"]的简写
. self::node() .//cd是self::node()/descendant-or-self::node()/child::cd的简写
.. parent::node()

../cd是parent::node()/child::cd的简写

// /descendant-or-self::node()/ //cd是/descendant-or-self::node()/child::cd的简写

示例

示例 结果
cd 选择当前节点的子节点中所有cd元素
* 选择当前节点的所有子元素
text() 选择当前节点的子节点中所有文本节点
@src 选择当前节点的所有src属性
@* 选择当前节点的所有属性
cd[1] 选择当前节点的第一个cd子节点
cd[last()] 选择当前节点的最后一个cd子节点
*/cd 选择当前节点的所有cd孙子节点
/book/chapter[3]/para[1] 选择book节点的第三个chapter子节点的第一个para子节点
//cd 选择所有文档根的所有cd元素后代,因而在同一个文档选择所有的cd元素作为当前节点
. 选择当前节点
.//cd 选择当前节点的cd元素后代
.. 选择当前节点的父亲节点
../@src 选择当前节点的父节点的src属性
cd[@type="classic"] 选择当前节点的子节点中type属性等于classic的所有cd子节点
cd[@type="classic"][5] 选择当前节点的子节点中type属性等于classic的cd子节点中第五个节点
cd[5][@type="classic"] 选择当前节点的第五个cd子节点,如果该子节点的type属性等于classic
cd[@type and @country] 选择当前节点的子节点中由type和country两个属性的所有cd子节点
摘自:
http://61.139.52.111:8090/kj/Manfeel/oltl/session1/session1-p03.htm

Previous Next

posted on 2008-03-05 10:16 扬扬 阅读(1302) 评论(0)  编辑  收藏


只有注册用户登录后才能发表评论。


网站导航:
 

导航

<2008年3月>
2425262728291
2345678
9101112131415
16171819202122
23242526272829
303112345

统计

常用链接

留言簿(1)

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜