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,全称为XML Path Language,是一种在XML文档中查找信息的语言。它被广泛应用于XML处理,如XSLT、XQuery以及XPointer等标准中。XPath通过路径表达式来选取XML文档中的元素、属性或其他类型的节点,使得我们可以...
**标题:** Dom4j 解析Xml文档及 XPath查询 学习笔记 **正文:** XML(eXtensible Markup Language)是一种标记语言,常用于数据交换、配置存储以及文档结构化表示。在Java世界中,解析XML文档有多种库,其中Dom4j是...
爬虫学习笔记(主要涉及scrapy,request,xpath,selenium等).md
编辑2.txt可能是一份XPath的学习笔记或者使用经验分享,记录了作者在学习过程中的一些发现和技巧。 掌握XPath对于处理XML数据至关重要,无论是简单的查询还是复杂的转换,都能得心应手。深入学习XPath教程,理解其...
《Java JDK 6 学习笔记》这本书很可能是为了帮助读者深入理解和掌握这个版本的Java编程语言及其开发环境。以下是一些关键知识点的详细说明: 1. **自动装箱与拆箱**:Java 6中引入了自动装箱和拆箱功能,使得基本...
Python 爬虫学习笔记涵盖了爬虫的基础知识、网络和前端基础、Requests 模块、请求头、GET 和 POST 请求、代理、Cookie 模拟登录、Quote 和 Unquote、登录和获取 Cookie、Post 和 Session、重试机制、JSON 和 ...
标题"Dom4j学习教程+API+xml实用大全+xml学习笔记+htc"提及了几个关键主题,包括Dom4j的学习资源、API文档,以及关于XML的实用指南和学习笔记,还提到了一个名为"htc"的文件,可能是关于HTC设备或技术的文档。...
【Yui_ext 学习笔记】 Yui_ext 是基于 Yahoo! UI Library (YUI) 的扩展,主要用于构建富客户端的 Web 应用程序。这篇学习笔记主要介绍了 Yui_ext 的基础知识,适合对 JavaScript 和 HTML DOM 有一定了解的初学者。 ...
本文档为一套关于Python网络爬虫与数据采集的课程学习笔记。其中详细讲解了以下知识点:xpath、lxml、BeautifulSoup库、Json模块以及Selenium库等。本文档适合对网络爬虫技术感兴趣的学习者,欢迎下载并尝试学习。 ...
### Selenium WebDriver 学习笔记知识点详解 #### 一、元素定位 Selenium WebDriver 提供了丰富的API用于元素定位,常见的定位策略包括: - **ID**:`driver.findElement(By.id("elementId"))` - **Name**:`driver...
**Java JDK6 学习笔记概述** Java JDK6(Java Development Kit 6)是Oracle公司发布的一个用于开发Java应用程序的重要工具集,包含了JRE(Java Runtime Environment)和一系列的开发和调试工具。这个版本的JDK发布...
本资料包“java学习笔记JDK6课件和课本代码”专注于JDK6版本的学习,这个版本是Java历史上的一个重要里程碑,引入了许多新特性并优化了性能。 首先,我们来了解JDK6的一些关键特性: 1. **增强的泛型**:JDK6对...
"良葛格"的Java JDK 6.0学习笔记旨在帮助初学者和有经验的程序员深入理解这一版本的Java语言特性,以及如何利用JDK 6.0进行开发。 一、JDK 6.0主要特性 1. **自动内存管理**:Java 6引入了更高效的垃圾回收机制,...
**标题解析:** "Dom4j学习笔记" 这个标题明确指出了我们要探讨的主题——Dom4j。Dom4j是一个流行的Java库,用于处理XML文档。它提供了丰富的API,使得XML的读取、写入、操作变得简单易行。在学习笔记中,通常会涵盖...
**Selenium学习笔记源代码** Selenium是一款强大的自动化测试工具,尤其在Web应用程序的测试领域,它被广泛应用。本学习笔记源代码旨在帮助开发者和测试工程师深入理解和掌握Selenium的基本用法,通过实际操作和...
**DOM4J学习笔记** DOM4J是一个Java库,它提供了强大的XML处理功能,包括解析、操作和生成XML文档。这个库是开源的,广泛应用于Java项目中,因其易用性和灵活性而备受开发者喜爱。这篇笔记将深入探讨DOM4J的核心...
本篇笔记将深入探讨XML DOM4J的学习要点。 一、XML基础知识 1. XML结构:XML文档由元素(Element)、属性(Attribute)、文本内容(Text)、注释(Comment)等组成。每个XML文档都有一个根元素,其他元素嵌套在根...
1. 简述 private、 protected、 public、 internal 修饰符的访问权限。 答 . private : 私有成员, 在类的内部才可以访问。 protected : 保护成员,该类内部和继承类中可以访问。 public : 公共成员,完全公开,...