XPath 简介
XPath 是一种在XML 文档中查找信息的语言。XPath 用于在XML 文档中通过元素和属性进行导航。
XPath 标准函数
XPath 含有超过100 个内建的函数。这些函数用于字符串值、数值、日期和时间表、节点和QName 处
理、序列处理、逻辑值等等。
XPath 在XSLT 中使用
XPath 是XSLT 标准中的主要元素。
XPath 节点
在XPath 中,有七种类型的节点:元素、属性、文本、命名空间、处理指令、注释以及文档节点(或成
为根节点)。
节点(Node)
XML 文档是被作为节点树来对待的。树的根被称为文档节点或者根节点。
基本值(或称原子值,Atomic value)
基本值是无父或无子的节点。如元素节点的值或属性的值。
项目(Item)
项目是基本值或者节点。
节点关系
父(Parent)
每个元素以及属性都有一个父
子(Children)
节点元素可有零个、一个或多个子。
同胞(Sibling)
拥有相同的父的节点
先辈(Ancestor)
某节点的父、父的父,等等。
后代(Descendant)
某个节点的子,子的子,等等。
XPath 语法
XPath 使用路径表达式来选取XML 文档中的节点或节点集。节点是通过沿着某个路径(path)或者步
(step)来选取的。
在下面的例子中使用这个XML 文档。
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="eng">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>
下面列出了最有用的路径表达式:
表达式 描述
nodename 选取此节点的所有子节点
/ 从根节点选取
// 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置
. 选取当前节点
.. 选取当前节点的父节点
@ 选取属性
举例:
路径表达式 结果
bookstore 选取bookstore 元素的所有子节点
/bookstore 选取bookstore 根元素
注释:假如路径起始于正斜杠( / ),则此路径为到某元素的绝对路径!
bookstore/book 选取所有属于bookstore 的子元素的book 元素。
//book 选取所有book 子元素,而不管它们在文档中的位置。
bookstore//book 选择所有属于bookstore 元素的后代的book元素,而不管它们位于bookstore
之下的什么位置。
//@lang 选取所有名为lang 的属性。
谓语(Predicates)
谓语用来查找某个特定的节点或者包含某个指定的值的节点。
谓语被嵌在方括号中。
举例:
路径表达式 结果
/bookstore/book[1] 选取属于bookstore 子元素的第一个book 元素。
/bookstore/book[last()] 选取属于bookstore 子元素的最后一个book 元素。
/bookstore/book[last()-1] 选取属于bookstore 子元素的倒数第二个book 元素。
/bookstore/book[position()<3] 选取最前面的两个属于bookstore 元素的子元素的
book 元素。
//title[@lang] 选取所有拥有名为lang 的属性的title 元素。
//title[@lang='eng'] 选取所有title 元素,且这些元素拥有值为eng 的
lang 属性。
/bookstore/book[price>35.00] 选取所有bookstore 元素的book 元素,且其中的
price 元素的值须大于35.00。
/bookstore/book[price>35.00]/title 选取所有bookstore 元素中的book 元素的title 元
素,且其中的price 元素的值须大于35.00。
选取未知节点
XPath 通配符可用来选取未知的XML 元素
通配符 描述
* 匹配任何元素节点
@* 匹配任何属性节点
node() 匹配任何类型的节点
举例:
路径表达式 结果
/bookstore/* 选取bookstore 元素的所有子节点
//* 选取文档中的所有元素
//title[@*] 选取所有带有属性的title 元素。
选取若干路径
通过在路径表达式中使用“|”运算符,您可以使用选取若干个路径。
XPath Axes(坐标轴)
XML 实例文档
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book>
<title lang="eng">Harry Potter</title>
<price>29.99</price>
</book>
<book>
<title lang="eng">Learning XML</title>
<price>39.95</price>
</book>
</bookstore>
XPath 轴
轴可定义某个相对于当前节点的节点集。
轴名称 结果
ancestor 选取当前节点的所有先辈(父、祖父等)
ancestor-or-self 选取当前节点的所有先辈(父、祖父等)以及当前节点本身
attribute 选取当前节点的所有属性
child 选取当前节点的所有子元素。
descendant 选取当前节点的所有后代元素(子、孙等)。
descendant-or-self 选取当前节点的所有后代元素(子、孙等)以及当前节点本身。
following 选取文档中当前节点的结束标签之后的所有节点。
namespace 选取当前节点的所有命名空间节点
parent 选取当前节点的父节点。
preceding 选取文档中当前节点的开始标签之前的所有节点。
preceding-sibling 选取当前节点之前的所有同胞。
self 选取当前节点。
位置路径表达式
位置路径可以是绝对的,也可以是相对的。
绝对路径起始于正斜杠( / ),而相对路径不会这样。在两种情况中,位置路径均包括一个或多个步,每个
步均被斜杠分割:
绝对位置路径:
/step/step/...
相对位置路径:
step/step/...
每个步均根据当前节点集之中的节点来进行计算。
步(step)包括:
轴(axis)
定义所选节点与当前节点之间的树关系
节点测试(node-test)
识别某个轴内部的节点
零个或者更多谓语(predicate)
更深入地提炼所选的节点集
步的语法:
轴名称::节点测试[谓语]
举例:
例子 结果
child::book 选取所有属于当前节点的子元素的book 节点
attribute::lang 选取当前节点的lang 属性
child::* 选取当前节点的所有子元素
attribute::* 选取当前节点的所有属性
child::text() 选取当前节点的所有文本子节点
child::node() 选取当前节点的所有子节点
descendant::book 选取当前节点的所有book 后代
ancestor::book 选择当前节点的所有book 先辈
ancestor-or-self::book 选取当前节点的所有book 先辈以及当前节点(假如此节点是book 节
点的话)
child::*/child::price 选取当前节点的所有price 孙。
XPath 运算符
XPath 表达式可返回节点集、字符串、逻辑值以及数字。
算符 描述 实例 返回值
| 计算两个
节点集
//book | //cd 返回所有带有book 和ck 元素的节点集
+ 加法 6 + 4 10
- 减法 6 - 4 2
* 乘法 6 * 4 24
div 除法 8 div 4 2
= 等于 price=9.80 如果price 是9.80,返回值为true 如果price
是9.90,返回值为fasle
!= 不等于 price!=9.80 如果price 是9.90,返回值为true 如果price
是9.98,返回值为fasle
< 小于 price<9.80 如果price 是9.00,返回值为true 如果price
是9.98,返回值为fasle
<= 小于或等于 price<=9.80 如果price 是9.00,返回值为true 如果price
是9.90,返回值为fasle
> 大于 price>9.80 true if price is 9.90 false if price is9.80
>= 大于或等于 price>=9.80 true if price is 9.90 false if price is9.70
or 或 price=9.80 or price=9.70 true if price is 9.80 false if price is 9.50
and 与 price>9.00 and price<9.90 true if price is 9.80 false if price is 8.50
mod 计算除法 的余数 5 mod 2 1
XPath 函数
节点集函数
节点集函数接受 node-set 参数。这些函数返回节点集或与节点集内的特定节点有关的信息。
节点集函数
count 返回 node-set 参数中的节点数。
id 按照唯一 ID 选择元素。
last 返回的数字等于表达式计算上下文的上下文大小。
local-name 返回 node-set 参数中按文档顺序处于第一位的节点的扩展名称本地部分。
name 返回的字符串包含一个 QName,该 QName 表示 node-set 参数中按文档顺序处于第一位
的节点的扩展名称。
namespace-uri 返回 node-set 参数中按文档顺序处于第一位的节点的扩展名称的命名空间统一资源标
识符 (URI)。
position 返回节点在父级中的索引号。
字符串函数
字符串函数用于计算、格式化和处理字符串参数,或将对象转换为字符串。
字符串函数
concat 返回参数的串联。
contains 如果第一个参数字符串包含第二个参数字符串,则返回 true;否则,返回 false。
normalize-space 返回去除了空白的参数字符串。
starts-with 如果第一个参数字符串以第二个参数字符串开头,则返回 true;否则,返回 false。
string 将对象转换为字符串。
string-length 返回字符串中的字符数。
substring 返回第一个参数中从第二个参数指定的位置开始、第三个参数指定的长度的子字符串。
substring-after 返回第一个参数字符串中第一次出现第二个参数字符串之后的子字符串。
substring-before 返回第一个参数字符串中第一次出现第二个参数字符串之前的子字符串。
translate 返回第一个参数字符串,出现第二个参数字符串中的字符的位置替换为第三个参数字
符串中对应位置的字符。
布尔函数
XML 路径语言 (XPath) 语法支持布尔函数,这些函数返回字符串或数字,可以与筛选模式中的比较运算符
一起使用。
布尔函数
boolean 将参数转换为布尔值。
false 返回 false。
lang 如果上下文节点的 xml:lang 属性与参数字符串相同,则返回 true。
not 如果参数为 false,则返回 true,否则,返回 false。
true 返回 true。
数值函数
XML 路径语言 (XPath) 语法支持数值函数,这些函数返回字符串或数字,可以与筛选模式中的比较运算符
一起使用。
数值函数
ceiling 返回不小于参数的最小整数。
floor 返回不大于参数的最大整数。
number 将参数转换为数字。
round 返回与参数最接近的整数值。
sum 返回节点集中所有节点的总和。每个节点在求和之前先转换为数值。
相关推荐
学习XPath的资料共享给大家,有实例程序,来自互联网。
爬虫学习笔记(主要涉及scrapy,request,xpath,selenium等).md
NULL 博文链接:https://even2012.iteye.com/blog/1832068
讲述了WebDriver-xpath和WebDriver-Css的学习摘要笔记,对于初学者还是很有用的,我也是转载的
1. 简述 private、 protected、 public、 internal 修饰符的访问权限。 答 . private : 私有成员, 在类的内部才可以访问。 protected : 保护成员,该类内部和继承类中可以访问。 public : 公共成员,完全公开,...
此文档是我当初学习《XML高级编程》 英文《PROFESSIONAL XML》 一书是做的一个电子档手册,后来发现几乎是原书的一个JAVA版的webservice 技术手册,亲们在自学是要尊重原书的版权。原书作者:Bill Evjen ,Kent ...
ExtJS4学习笔记(七)---带搜索的Grid(SearchGrid) ExtJS4学习笔记(三)---VBox的使用 ExtJS4学习笔记(九)---ExtJS4 EditGrid(可编辑的Grid) ExtJS4学习笔记(二)---HBox的使用 ExtJS4学习笔记(五)---Grid分页 ExtJS4...
Web-Harvest是Web数据挖掘工具。...<xpath expression="//a[@shape='rect']/@href"> </xpath> WebHarverst提供一组数据处理和控制流。Processor组合成管道,构成执行链。也提供了variable context。
bs4 通过html标签获取网页内容、Xpath解析、模拟登录cookies、多线程,多进程、selenium的使用
学习笔记 编辑器:Sublime 注意:这里的理论部分是关于XML文档的,但是介于HTML和XML的相似性,大家可以自行做类比,有的地方我也会用HTML和XML做类比。 上一篇:Xpath与谓词的爱 文章目录节点集上使用谓词节点集上...
刚学过正则表达式,用的正顺手,现在就把正则表达式替换掉,使用 XPath,有人表示这太坑爹了,早知道刚上来就学习 XPath 多省事 啊。其实我个人认为学习一下正则表达式是大有益处的,之所以换成 XPath ,我个人认为...
\contentsline {chapter}{... {14.5}XPath}{210}{section.14.5} {14.6}apache.commons}{211}{section.14.6} {15}sqlite3}{213}{chapter.15} {16}Web基础}{215}{chapter.16} {16.1}HTML}{215}{section.16.1} {...
常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用...
常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用...
常用的解析工具有正则表达式、XPath、Beautiful Soup等。这些工具帮助爬虫定位和提取目标数据,如文本、图片、链接等。 数据存储: 爬虫将提取的数据存储到数据库、文件或其他存储介质中,以备后续分析或展示。常用...
若fork或star请注明来源note笔记爬虫介绍: 《爬虫基础学习(总结)》模块库: cookie&代理package/6wordcloud&jieba 词云功能包名作用数据获取request爬取网页数据 解析re正则表达式BeautifulSoupxpathxpath语法来...
一、简单配置,获取单个网页上的内容。 (1)创建scrapy项目 scrapy startproject getblog (2)编辑 items.py # -*- coding: utf-8 -*- # Define here the models for your scraped items ...# See documentation ...
搜集整理淘宝网关于热干面...因此,在此次项目项目中,我们利用selenium抓取淘宝商品并使用Xpath解析得到商品的名称、价格、购买人数、店铺名称、和店铺所在地的信息,并将数据保存在本地。具体爬虫思路如下: 导入相应