一、基本语法

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学习的更多相关文章

  1. XPath 学习二: 语法

    XPath 使用路径表达式来选取 XML 文档中的节点或节点集.节点是通过沿着路径 (path) 或者步 (steps) 来选取的. 下面列出了最有用的路径表达式: 表达式 描述 nodename 选 ...

  2. xpath 学习一: 节点

    xpath 中,有七种类型的节点: 元素.属性.文本.命名空间.处理指令.注释.以及根节点 树的根成为文档节点或者根节点. 节点关系: Parent, Children, sibling(同胞), A ...

  3. XML Xpath学习

    Xpath是一门在xml文档中查找信息的语言. Xpath可用来在xml文档中对元素和属性进行遍历. <1>路径表达式1: 斜杠(/)作为路径内部的分隔符 同一个路径有绝对路径和相对路径两 ...

  4. XPath学习:轴(3)——descendant

    XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对元素和属性进行遍历. XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointe ...

  5. XPath学习:轴(14)——总结

    原文地址:http://www.cnblogs.com/zhaozhan/archive/2009/09/10/1564396.html XPath 是一门在 XML 文档中查找信息的语言.XPath ...

  6. XPath学习:parent,child

    XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对元素和属性进行遍历. XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointe ...

  7. HtmlAgilityPackage XPath学习

    最近的开发中要用到htmlAgilityPackage, 所以记录一下XPath相关知识! XPath 简介 XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对 ...

  8. Xpath学习笔记

    最近复习自己上一年的课本,想起来刚学那个时候想做一个写日记的软件. 想不如做,用控制台瞎写了一个,一做就成了,没什么bug,期间使用Xpath来读数据,所以就稍微学了一下. 学习过程就这样做一点笔记, ...

  9. python xpath学习

    一.选取节点: 二.谓词: 注意:在scrapy中用xpath进行搜索时,如果使用相对路径,要加上.,如,不然搜索的是整个文档.

  10. 抓包分析、多线程爬虫及xpath学习

    1.抓包分析 1.1 Fiddler安装及基本操作 由于很多网站采用的是HTTPS协议,而fiddler默认不支持HTTPS,先通过设置使fiddler能抓取HTTPS网站,过程可参考(https:/ ...

随机推荐

  1. python 练习题练习题2--多分支选择

    题目:企业发放的奖金根据利润提成.利润(I)低于或等于10万元时,奖金可提10%:利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%:20万到40万之 ...

  2. Scala:fold,foldLeft和foldRight区别与联系 reduce

    Scala:fold,foldLeft和foldRight区别与联系 我们来看看最后一个函数:reduce.使用reduce我们可以处理列表的每个元素并返回一个值.通过使用reduceLeft和red ...

  3. java 教程

    1.视频教程 http://blog.csdn.net/zhangdaiscott/article/details/18220411 2.书籍教程: 3.学习课程

  4. mac os下android 通过battery-historian进行电量分析

    简单介绍下如何用battery-historian进行电量分析,因为battery-hostorian是基于go语言的框架,所以需要安装go 1.安装go 2.配置go环境变量到.bash_profi ...

  5. linux程序设计——主机字节序和网络字节序(第十五章)

    15.2.10    主机字节序和网络字节序 当在基于intel处理器的linux机器上执行新版本号的server和客户程序时,能够用netstat命令查看网络连接状况.它显示了客户/server连接 ...

  6. The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Cha

    The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Cha ...

  7. 【python】模块测试 if name main

    verbose=1 def listing(module): if verbose: print '-'*30 print 'name:',module.__name__,'file:',module ...

  8. VisualSVN 5.1.5 破解版 手动破解教程 生成dll文件

    VisualSVN 5.1.5 破解版 手动破解教程 生成VisualSVN.Core.L.dll文件 附上本人用到的命令: ildasm "D:\Program Files (x86)\V ...

  9. 【BZOJ2212】[Poi2011]Tree Rotations 线段树合并

    [BZOJ2212][Poi2011]Tree Rotations Description Byteasar the gardener is growing a rare tree called Ro ...

  10. 【BZOJ4385】[POI2015]Wilcze doły 单调栈+双指针法

    [BZOJ4385][POI2015]Wilcze doły Description 给定一个长度为n的序列,你有一次机会选中一段连续的长度不超过d的区间,将里面所有数字全部修改为0.请找到最长的一段 ...