附件: xpath.zip
把ZVON.org 上的 XPath实例教程综合到了一起,写成Word文档。详细内容见附件。
实例 1
/AAA /AAA/CCC /AAA/DDD/BBB
基本的 XPath 语法类似于在一个文件系统中定位文件 , 如果路径以斜线 / 开始 , 那么该路径就表示到一个元素的绝对路径
实例 2
//BBB //DDD/BBB
如果路径以双斜线 // 开头 , 则表示选择文档中所有满足双斜线 // 之后规则的元素 ( 无论层级关系 )
实例 3
/AAA/CCC/DDD/* /*/*/*/BBB //*
星号 * 表示选择所有由星号之前的路径所定位的元素
实例 4
/AAA/BBB[1] /AAA/BBB[last()]
方块号里的表达式可以进一步的指定元素 , 其中数字表示元素在选择集里的位置 , 而 last() 函数则表示选择集中的最后一个元素 .
实例 5
//@id //BBB[@id] //BBB[@name] //BBB[@*] //BBB[not(@*)]
实例 6
//BBB[@id='b1'] //BBB[@name='bbb'] //BBB[normalize-space(@name)='bbb']
属性的值可以被用来作为选择的准则 , normalize-space 函数删除了前部和尾部的空格 , 并且把连续的空格串替换为一个单一的空格
实例 7
//*[count(BBB)=2] //*[count(*)=2] //*[count(*)=3]
count() 函数可以计数所选元素的个数
实例 8
//*[name()='BBB'] //*[starts-with(name(),'B')] //*[contains(name(),'C')]
name() 函数返回元素的名称 , start-with() 函数在该函数的第一个参数字符串是以第二个参数字符开始的情况返回 true, contains() 函数当其第一个字符串参数包含有第二个字符串参数时返回 true.
实例 9
//*[string-length(name()) = 3] //*[string-length(name()) < 3] //*[string-length(name()) > 3]
string-length 函数返回字符串的字符数 , 你应该用 < 替代 <, 用 > 代替 >
实例 10
//CCC | //BBB /AAA/EEE | //BBB /AAA/EEE | //DDD/CCC | /AAA | //BBB
多个路径可以用分隔符 | 合并在一起
实例 11
/AAA /child::AAA /AAA/BBB /child::AAA/child::BBB /child::AAA/BBB
child 轴 (axis) 包含上下文节点的子元素 , 作为默认的轴 , 可以忽略不写 .
实例 12
/descendant::* /AAA/BBB/descendant::* //CCC/descendant::* //CCC/descendant::DDD
descendant ( 后代 ) 轴包含上下文节点的后代 , 一个后代是指子节点或者子节点的子节点等等 , 因此 descendant 轴不会包含属性和命名空间节点 .
实例 13
//DDD/parent::*
parent 轴 (axis) 包含上下文节点的父节点 , 如果有父节点的话
实例 14
/AAA/BBB/DDD/CCC/EEE/ancestor::* //FFF/ancestor::*
ancestor 轴 (axis) 包含上下节点的祖先节点 , 该祖先节点由其上下文节点的父节点以及父节点的父节点等等诸如此类的节点构成 , 所以 ancestor 轴总是包含有根节点 , 除非上下文节点就是根节点本身 .
实例 15
/AAA/BBB/following-sibling::* //CCC/following-sibling::*
following-sibling 轴 (axis) 包含上下文节点之后的所有兄弟节点
实例 16
/AAA/XXX/preceding-sibling::* //CCC/preceding-sibling::*
preceding-sibling 轴 (axis) 包含上下文节点之前的所有兄弟节点
实例 17
/AAA/XXX/following::* //ZZZ/following::*
following 轴 (axis) 包含同一文档中按文档顺序位于上下文节点之后的所有节点 , 除了祖先节点 , 属性节点和命名空间节点
实例 18
/AAA/XXX/preceding::* //GGG/preceding::*
preceding 轴 (axis) 包含同一文档中按文档顺序位于上下文节点之前的所有节点 , 除了祖先节点 , 属性节点和命名空间节点
实例 19
/AAA/XXX/descendant-or-self::* //CCC/descendant-or-self::*
descendant-or-self 轴 (axis) 包含上下文节点本身和该节点的后代节点
实例 20
/AAA/XXX/DDD/EEE/ancestor-or-self::* //GGG/ancestor-or-self::*
ancestor-or-self 轴 (axis) 包含上下文节点本身和该节点的祖先节点
实例 21
//GGG/ancestor::* //GGG/descendant::* //GGG/following::*
//GGG/preceding::* //GGG/self::*
//GGG/ancestor::* | //GGG/descendant::* | //GGG/following::* | //GGG/preceding::* | //GGG/self::*
ancestor, descendant, following, preceding 和 self 轴 (axis) 分割了 XML 文档 ( 忽略属性节点和命名空间节点 ), 不能交迭 , 而一起使用则包含所有节点
实例 22
//BBB[position() mod 2 = 0 ]
//BBB[ position() = floor(last() div 2 + 0.5) or position() = ceiling(last() div 2 + 0.5) ]
//CCC[ position() = floor(last() div 2 + 0.5) or position() = ceiling(last() div 2 + 0.5) ]
div 运算符做浮点除法运算 , mod 运算符做求余运算 , floor 函数返回不大于参数的最大整数 ( 趋近于正无穷 ), ceiling 返回不小于参数的最小整数 ( 趋近于负无穷 )