Xpath用法解析

http://www.zvon.org/xxl/XPathTutorial/General_chi/examples.html(参考地址)

1、  绝对路径“/”

/div /span 一级查找从div开始,找其下的所有span标签元素。

2、  相对路径“//”

只要满足“//”后面的内容即可(无论层级关系)

//div/span 表示找所有div层下span标签。

3、  任意值“*”

“*” 代表任意内容

4、  Xpath中表达使用“[]”

/AAA/BBB[] 表达式写在中括号;

/AAA/BBB[1] 表示“AAA”下的第一个“BBB”元素;

/AAA/BBB[last()] 表示“AAA”下最后一个“BBB”元素,last()为xpath函数。

5、  元素属性通过前缀“@”引用

@name 表示name属性

//@id 表示所有的id属性;(该处获取的是属性id,不是含id的属性元素)

//BBB[@id] 表示所有含id属性的“BBB”元素;

//BBB[@*] 表示含有任意属性的“BBB”元素;

//BBB[not(@*)] 表示不含任意属性的元素;

6、  属性值作为选择标准

//BBB[@id=’abc’] 选择含有属性id且属性值为’abc’的“BBB”元素;

//BBB[normalize-space(@name)=’abc’] 选择含有属性name且其值(在用normalize-space函数去掉前后空格后)为’abc’的“BBB”元素;(normalize-space函数删除前后的空格,并把连续的空格串替换为一个单一的空格)

7、  统计函数count()

//*[count(BBB)=2] 选择含有2个“BBB”子元素的元素;

//*[count(*)=3] 选择含有3个子元素的元素;

8、  函数

name()返回元素的名称

//*[name()=’abc’] 选择所有名称为BBB的元素。(这里等价于//BBB)

start-with(a,b)该函数a参数第一个字符以b参数开始时返回true

//*[starts-with(name(),’a’)] 选择所有名称以'a’起始的元素。

contains(a,b)第一个参数a包含第二个参数b时返回true

//*[contains(name(),’c’)] 选择所有名称包含’c’的元素。

string-length函数返回字符串的字符数,你应该用’&lt;’替代’<’,’&gt;’替代’>’

//*[string-length(name())=3] 选择名字长度为3的元素。

//*[string-length(name()<3)] 选择名字长度小于3的元素。

//*[string-length(name()>3)] 选择名字长度大于3的元素。

9、  多个路径可以用分隔符“|”合并在一起

//CCC|//BBB 选择所有的CCC和BBB元素。

/AAA/EEE|//BBB 选择所有的BBB元素和所有AAA元素的子元素EEE。

10、child轴(axis)包含上下文节点的子元素,作为默认的轴,可以忽略不写。

         /AAA 等价于 /child::AAA

         /child::AAA/child::BBB 等价于 /AAA/BBB

         /child::AAA/BBB (二者可以合并写) 等价于 /AAA/BBB

11、descendant(后代)轴包含上下文节点的后代,一个后代是指子节点或者子节点的节点等等,因此descendant轴不会包含属性和命名空间节点。

         /descendant::* 选择文档根元素的所有后代,即所有的元素被选择。

         /AAA/BBB/descendant::* 选择/AAA/BBB的所有后代元素,如图11-1。

         //CCC/descendant::* 选择在祖先元素中有CCC的所有元素,如图11-2。

         //CCC/descendant::DDD 选择所有以CCC为祖先元素的DDD元素,如图11-3。

                                                 

 图11-1     图11-2      图11-3

12、parent轴(axis)包含上下文节点的父节点,如果有父节点的话

         //DDD/parent::* 选择DDD元素的所有父节点 如图12-1。

        

                                                                 图12-1

13、ancestor轴(axis)包含上下节点的祖先节点,该祖先节点由其上下文节点的父节点以及父节点的父节点等等诸如此类的节点构成,所以ancestor轴总是包含有根节点,除非上下文节点就是根节点。

         /AAA/BBB/DDD/CCC/EEE/ancestor::* 选择一个绝对路径上的所有节点,如图13-1。

         //FFF/ancestor::* 选择FFF元素的祖先节点,如图13-2。

                  

                    图13-1                                       图13-2

14、following-sibling轴(axis)包含上下文节点之后的所有兄弟节点

         /AAA/BBB/following-sibling::* 如图14-1。

         //CCC/following-sibling::* 如图14-2。

         

         图14-1                                图14-2

15、preceding-sibling轴(axis)包含上下文节点之前的所有兄弟节点

         /AAA/XXX/preceding-sibling::* 如图15-1。

         //CCC/preceding-sibling::* 如图15-2。

                       

                   图15-1                                          图15-2

16、following轴(axis)包含同一文档中按文档顺序位于上下文节点之后的所有节点,除了祖先节点、属性节点和命名空间节点

         /AAA/XXX/following::* 如图16-1。

         //ZZZ/following::* 如图16-2。

                           

               图16-1                        图16-2

17、preceding轴(axis)包含同一文档中按文档顺序位于上下文节点之前的所有节点,除了祖先节点、属性节点和命名空间节点

         /AAA/XXX/preceding::* 如图17-1

         //GGG/preceding::* 如图17-2

                            

      图17-1                              图17-2

18、descendant-or-self轴(axis)包含上下文节点本身和该节点的后代节点

         /AAA/XXX/descendant-or-self::* 如图18-1

         //CCC/descendant-or-self::* 如图18-2

                       

                            图18-1                         图18-2

19、ancestor-or-self轴(axis)包含上下文节点本身和该节点的祖先节点

         /AAA/XXX/DDD/EEE/ancestor-or-self::* 如图19-1

         //GGG/ancestor-or-self::* 如图19-2

                       

                            图19-1                    图19-2

20、ancestor, descendant, following, preceding和self轴(axis)分割了xml文档(忽略属性节点和命名空间节点),不能交迭,而一起使用则包含所有节点。

         //GGG/ancestor::* | //GGG/descendant::* | //GGG/following::* | //GGG/preceding::* | //GGG/self::* 如下图

        

21、div运算符做浮点除法运算,mod运算符做求余运算,floor函数返回不大于参数的最大整数(趋近于正无穷),ceiling返回不小于参数的最小整数(趋近于负无穷)

         //BBB[position() mod 2=0] 如图21-1

         //BBB[position()=floor(last() div 2+0.5) or position()=ceiling(last() div 2+0.5)] 如图21-2

         //CCC[position()=floor(last() div 2+0.5) or position()=ceiling(last() div 2+0.5)] 如图21-3

                                     

  图21-1            图21-2                  图21-3

posted @ 2013-06-11 21:41  Agoly  阅读(742)  评论(0编辑  收藏  举报