出处:http://www.cnblogs.com/Miko2012/archive/2012/10/26/2740840.html

XPath的语法最基本的节点之间用/,属性用@,还有几个函数记住了基本问题就可以解决了。可以随时查手册

示例Xml:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?xml version="1.0" encoding="utf-8" ?>
<pets>
<cat color="black" weight="10">
<price>100</price>
<desc>this is a black cat</desc>
</cat>
<cat color="white" weight="9">
<price>80</price>
<desc>this is a white cat</desc>
</cat>
<cat color="yellow" weight="15">
<price>80</price>
<desc>this is a yellow cat</desc>
</cat>
<dog color="black" weight="10">
<price>100</price>
<desc>this is a black dog</desc>
</dog>
<dog color="white" weight="9">
<price>80</price>
<desc>this is a white dog</desc>
</dog>
<dog color="yellow" weight="15">
<price>80</price>
<desc>this is a yellow dog</desc>
</dog>
</pets>

XPath的语法:

1. XPath中的符号

符号

说明

示例

示例说明

/

表示从根节点开始选择

/pets

选择根节点pets

表示节点和子节点之间的间隔符

/pets/dog

选择pets节点下的dog节点

//xx

表示从整个xml文档中查找,而不考虑当前节点位置

//price

选择文档中所有的price节点

.

单个英文半角句点表示选择当前节点

/pets/.

选择pets节点

..

双点,表示选择父节点

/pets/dog[0]/..

表示pets节点,也就是第一个dog节点的父节点

@xx

表示选择属性

//dog/@color

表示选择所有dog节点的color属性集合

[…]

中括号表示选择条件,括号内为条件

//dog[@color=’white’]

所有color为white的dog节点

//dog[/price<100]

所有price字节点值小于100的dog节点

中括号内数字为节点索引,类似c#等语言中的数组,数组下标是从1开始的

//dog[1]

第1个dog节点

//dog[last()]

最后一个dog节点,last()是xPath内置函数

|

单竖杠表示合并节点结合

//dog[@color=’white’] | //cat[@color=’white’]

color属性为white的dog节点和color属性为white的cat节点

*

星号表示任何名字的节点或者属性

//dog/*

表示dog节点的所有子节点

//dog/@*

表示dog节点的所有属性节点

2. XPath数学运算符
+ 加号表示加
- 表示数字相减
* 表示乘以
div 表示除以,这里数学上的除号/已经被用作节点之间分隔符了
mod 表示取余
3. XPath逻辑运算符
= 等于,相当于c#中的 ==
!= 不等于
> 大于
>= 大于等于
< 小于
<= 小于等于
and 并且 与关系
or 或者 或关系
4. XPath Axes 从字面翻译这个是XPath轴的意思,但根据我的理解这个翻译成XPath节点关系运算关键字更合适,就是一组关键字加上::双冒号表示和当前节点有关系的一个或者一组节点.
使用语法: axisname::nodetest[predicate] 即轴名字::节点名字[取节点条件]
具体说明如下:

关键字

说明

示例

示例说明

ancestor

当前节点的父祖节点

ancestor::pig

当前节点的祖先节点中的pig节点

ancestor-or-self

当前节点以及其父祖节点

ancestor::pig

 

attribute

当前节点的所有属性

attribute::weight

相当于@weight,attribute::和@是等价的

child

当前节点的所有字节点

child::*[name()!=’price’]

选择名字不是price的子节点

descendant

子孙节点

descendant::*[@*]

有属性的子孙节点

descendant-or-self

子孙节点以及当前节点

descendant-or-self::*

 

following

Xml文档中当前节点之后的所有节点

following::*

 

following-sibling

当前节点的同父弟弟节点

following-sibling::

 

preceding

Xml文档中当前节点之前的所有节点

preceding::*

 

namespace

选取当前节点的所有命名空间节点

namespace::*

 

parent

当前节点的父节点

parent::

相当于双点..

preceding-sibling

当前节点之后的同父兄节点

preceding-sibling::*

 

self

当前节点

self::*

相当于单点.

 
5. 常用的XPath函数介绍:
在XPath表达式中常用的函数有下面两个:
position() 表示节点的序号例如 //cat[position() = 2] 表示取序号为2的dog节点
last() 表示取最后一个节点 //cat[last()]
name() 表示当前节点名字 /pets/*[name() != 'pig'] 表示/pets下名字不是pig的子节点
XPath的函数还有很多,包括字符串函数,数字函数和时间函数等,具体可以参考w3的网站。
本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/xiandedanteng/p/5212142.html,如需转载请自行联系原作者

转载:XPath基本语法相关推荐

  1. python爬虫xpath的语法

    有朋友问我正则,,okey,其实我的正则也不好,但是python下xpath是相对较简单的 简单了解一下xpath: XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML ...

  2. CSS选择器与Xpath常用语法及对比

    文章目录 写在前面 CSS选择器基本语法 一些不足 Xpath查询基本语法 二者的主要对比 相同 不同 语法方面 写在前面 写爬虫时候经常遇到HTML元素的定位问题,针对这个问题,主流的两种思路是CS ...

  3. 【selenium自动化】04 xpath高级语法css高级语法

    xpath高级语法 # /html/body/section/div[1]/div[3]/ul/li[2]/a/i # xpath使用路径表达式来匹配xml文档或html文档中的节点或节点集 # 这个 ...

  4. crx header invalid_解决Chrome插件安装时程序包无效【CRX_HEADER_INVALID】(转载+xPath插件)...

    最近安排让协助开发/维护爬虫工具类,主要涉及到网页内容的获取,主要使用python+xPath作为解析库,初次认识,感觉还不错! https://www.w3.org/TR/xpath/all/ ht ...

  5. (转载)Markdown基本语法

    转载于和感谢: Markdown基本语法 前言: Markdown是一种纯文本格式的标记语言.通过简单的标记语法,它可以使普通文本内容具有一定的格式. 相比WYSIWYG编辑器 优点: 因为是纯文本, ...

  6. JSONPath库:使用类似Xpath的语法解析JSON数据

    简介 JSONPath是一种信息抽取类库,是从JSON文档中抽取指定信息的工具,提供多种语言实现版本,包括:Javascript, Python, PHP 和 Java.JsonPath 对于 JSO ...

  7. 【转载】抽象语法树简介(有图)

    转载自http://blog.chinaunix.net/uid-26750235-id-3139100.html 抽象语法树简介 (一)简介 抽象语法树(abstract syntax code,A ...

  8. 一文读懂XPath基本语法_XPath语法详解_XPath教程

    因为最近在学习与整理有关python爬虫的文章,连带遇到XPath的使用,就顺便一起整理出来. XPath与自动化的关系 XPath是一门在XML文档中查找信息的语言,可用来在XML文档中对元素和属性 ...

  9. 【转载】CMake 语法 - 详解 CMakeLists.txt

    作者:红橙Darren 链接:https://www.jianshu.com/p/528eeb266f83 来源:简书 目录 1. 初试 cmake 的 helloworld 2. 构建生成 .so ...

最新文章

  1. views 多个文件夹 netcore_Visual Studio 2019发布.NET Core项目部署或者独立运行的方法...
  2. 从零点五开始用Unity做半个2D战棋小游戏(六)
  3. JDBC实例--JDBC连接池技术解密,连接池对我们不再陌生
  4. Git--rebase合并提交
  5. 高光谱成像技术在茶叶中的应用研究进展
  6. 拓端tecdat|R语言对HullWhite短期利率模型仿真
  7. Java核心技术卷II:高级特性
  8. 软工文档——可行性研究报告
  9. 生物信息学_分子数据库(二)核酸
  10. arduino做一个表白程序
  11. 在夜神模拟器内部安装App
  12. jpg如何缩小kb?jpg图片压缩怎么弄?
  13. html语言文本框怎么做,HTML文本框参考样式
  14. 神经系统的组成结构图谱,神经系统的基本结构图
  15. 刘氏广传公家族七公子巨波公后裔V0.2
  16. 静态工厂方法优缺点个人理解
  17. PHP获取带中英文括号的内容
  18. K8s---HPA弹性伸缩
  19. [转帖]windows7/windows NT介绍
  20. 监控视频服务器协议,教你用Spcaserv架设网络视频监控 - 网络协议 - 电子发烧友网...

热门文章

  1. postgres数据库常见报错
  2. SQL中,like的SQL注入防止,使用预编译SQL(?)的写法
  3. html内嵌样式字体,html-通过内联C加载外部字体
  4. 【Oracle】创建用户
  5. Ubuntu火狐浏览器无法输入简体中文的解决方案
  6. MySql存储过程异常处理示例
  7. MYSQL问题解决方案:Access denied for user ‘root‘@‘localhost‘ (using password:YES)
  8. 转到Visual Studio中的匹配括号吗?
  9. myBatis的xml映射文件中传入list集合与数组做条件
  10. linux 延展集群如何设置,OCaml 4.11.0 发布,将函数式语言 Caml 在面向对象上进行延展...