XPath学习

Posted 小范儿JQ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XPath学习相关的知识,希望对你有一定的参考价值。

一、基本语法

1、以 / 斜线开始,该路径表示到一个元素下的绝对路径

2、如果路径以双斜线 // 开头, 则表示选择文档中所有满足双斜线//之后规则的元素(无论层级关系)

3、星号 * 表示选择所有由星号之前的路径所定位的元(/AAA/BBB/DDD/* 选择AAA/BBB/DDD下的所有元素;/*/*/*/BBB选择第四层级为BBB的所有元素)

4、[]和last()

    方块号里的表达式可以进一步的指定元素, 其中数字表示元素在选择集里的位置, 而last()函数则表示选择集中的最后一个元素.如(/AAA/BBB[0]和/AAA/BBB[last()])

5、属性(有无属性)

    //@id  选择所有属性为id的元素     //BBB[@id]    选择有id属性的BBB元素   //BBB[@name]   选择有name属性的BBB元素      //BBB[@*]  选择有任意属性的BBB元素

    //BBB[not(@*)]   选择没有属性的BBB元素

6、属性2(带值的属性) 

   normalize-space函数删除了前部和尾部的空格, 并且把连续的空格串替换为一个单一的空

   //BBB[@id=\'b1\'] 选择含有属性id且其值为\'b1\'的BBB元素     //BBB[@name=\'bbb\']  选择含有属性name且其值为\'bbb\'的BBB元素  //BBB[normalize-space(@name)=\'bbb\'] 选择含有属  

 name且其值(在用normalize-space函数去掉前后空格后)为\'bbb\'的BBB元素

7、count()函数

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

8、name()函数

name()函数返回元素的名称, start-with()函数在该函数的第一个参数字符串是以第二个参数字符开始的情况返回true, contains()函数当其第一个字符串参数包含有第二个字符串参数时返回true.

  //*[name()=\'BBB\'] 选择所有名称为BBB的元素(这里等价于//BBB)     //*[starts-with(name(),\'B\')]选择所有名称以"B"起始的元素     //*[contains(name(),\'C\')]选择所有名称包含"C"的元素

9、string-length函数

string-length函数返回字符串的字符数

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

10、分隔符 |

 

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

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

11、descendant (后代)轴

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

 

  /descendant::*   选择文档根元素的所有后代.即所有的元素被选择   /AAA/BBB/descendant::*    选择/AAA/BBB的所有后代元素   //CCC/descendant::DDD 选择所有以CCC为祖先元素的DDD元素

 12、parent轴

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

//DDD/parent:: *选择DDD元素的所有父节点

13、ancestor

选择祖先节点

/AAA/BBB/DDD/CCC/EEE/ancestor::*  选择EEE的所有根节点   //FFF/ancestor::*  选择FFF元素的祖先节点

14、following-sibling轴

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

/AAA/BBB/following-sibling::*  选择与BBB同级后边的兄弟节点

15、preceding-sibling

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

 

与14刚好相反,一个是之前,一个是之后

16、following轴

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

其后的所有节点,包含不同级别的等只要是在节点之后的所有节点

17、descendant-or-self

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

18、ancestor-or-self 轴(axis)

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

 

以上是关于XPath学习的主要内容,如果未能解决你的问题,请参考以下文章

xPath基本语法规则-Java网络爬虫系统性学习与实战系列

xPath基本语法规则-Java网络爬虫系统性学习与实战系列

WebGoat教程学习--XPATH 注入(XPATH-Injection)

java-xpath学习

XPath学习:轴——descendant

xpath库学习