📅  最后修改于: 2023-12-03 15:21:19.337000             🧑  作者: Mango
XPath是一种用于在XML或HTML文档中选择节点的语言。它是W3C的一个标准,可以在多种编程语言中使用。
XPath的表达式由轴、节点测试、运算符和函数构成,可以用于定位、选取和操作文档中的节点。
XPath的基本语法如下:
nodetest[predicate]/nodetest[predicate]/...
其中,nodetest
是一个节点测试,用于匹配文档中的节点,predicate
是一个谓词,用于进一步筛选匹配到的节点。
例如,以下xpath表达式可以匹配文档中所有的book
节点:
//book
XPath中的轴用于指定节点之间的关系,有以下几种轴:
ancestor
:所有祖先节点ancestor-or-self
:所有祖先节点及当前节点attribute
:所有属性节点child
:所有子节点descendant
:所有后代节点descendant-or-self
:所有后代节点及当前节点following
:当前节点之后所有节点preceding
:当前节点之前所有节点following-sibling
:当前节点之后的兄弟节点preceding-sibling
:当前节点之前的兄弟节点self
:当前节点XPath中的轴可以通过加上::
来使用,例如,以下xpath表达式可以匹配文档中所有book
节点后面的title
节点:
//book/following-sibling::title
XPath中的节点测试用于匹配文档中的节点。常用的节点测试有以下几种:
node()
:匹配任意节点*
:匹配任意元素节点@*
:匹配任意属性节点text()
:匹配文本节点comment()
:匹配注释节点processing-instruction()
:匹配处理指令节点XPath中的节点测试可以组合使用,例如,以下xpath表达式可以匹配文档中所有的book
元素节点下的文本节点:
//book/text()
XPath中的谓词用于进一步筛选匹配到的节点。谓词是放在方括号中的条件表达式,可以使用运算符、函数和节点测试等。
例如,以下xpath表达式可以匹配文档中所有第2个book
节点:
//book[2]
XPath中常用的运算符如下:
=
:等于!=
:不等于<
:小于>
:大于<=
:小于等于>=
:大于等于and
:逻辑与or
:逻辑或mod
:取模+
:加-
:减*
:乘/
:除例如,以下xpath表达式可以匹配文档中所有价格在10到20之间的book
节点:
//book[price > 10 and price < 20]
XPath中常用的函数如下:
last()
:返回文档中最后一个节点的序号position()
:返回当前节点在其父节点中的位置count()
:返回匹配到的节点数量concat()
:拼接字符串substring()
:提取子串lower-case()
:转换为小写upper-case()
:转换为大写例如,以下xpath表达式可以匹配文档中所有价格小于15的book
节点,并返回其title
和price
:
//book[price < 15]/concat(title, ': ', price)
以下是一个示例XML文档:
<?xml version="1.0"?>
<library>
<book>
<title>Java Programming</title>
<author>John Smith</author>
<price>20</price>
</book>
<book>
<title>Python Programming</title>
<author>Jane Doe</author>
<price>15</price>
</book>
<book>
<title>C++ Programming</title>
<author>Mike Johnson</author>
<price>25</price>
</book>
</library>
以下是一些常用的xpath表达式:
//book
:匹配所有的book
节点//book/title
:匹配所有的book
节点下的title
节点//book[@price > 20]
:匹配所有价格大于20的book
节点//book[1]/title
:匹配第1个book
节点下的title
节点//book[count(*) = 3]
:匹配所有子节点数量为3的book
节点//book[contains(title, 'Java')]
:匹配所有title
节点中包含Java的book
节点