1/10
XPath(XML Path Language)是一种在XML和HTML文档中查找信息的语言,用于在文档结构中选择节点或节点集。以下是XPath的主要使用方法和常见语法总结:
1. 基本概念
-
节点(Node):XPath中,文档被视为一个节点树,包括元素节点、属性节点、文本节点等。
-
路径表达式(Path Expression):用于定位文档中的节点或节点集。
2. 基本语法
绝对路径与相对路径
-
绝对路径:从根节点开始,以“/”开头。例如:xpath复制
/html/body/div表示选择从根节点开始的html元素下的body元素下的div元素。 -
相对路径:从当前节点开始,不以“/”开头。例如:xpath复制
.//div表示从当前节点选择所有后代中的div元素。
路径分隔符
-
/:表示根节点或路径分隔符。 -
//:在当前节点选择文档中的节点,而不考虑它们的位置。例如:xpath复制//div表示选择文档中所有div元素。
3. 常用选择方法
选择特定节点
-
元素节点:xpath复制
div选择所有div元素。 -
属性节点:xpath复制
@class选择所有class属性。 -
文本节点:xpath复制
text()选择文本内容。
选择特定位置的节点
-
子节点:xpath复制
/html/body/p
复制
选择`html`下的`body`下的`p`元素。
- **后代节点**:
```xpath
/html//p
选择
html下所有p元素,无论其嵌套层级。-
父节点:xpath复制
..选择当前节点的父节点。 -
当前节点:xpath复制
.选择当前节点。 -
根节点:xpath复制
/选择文档的根节点。
4. 使用谓语(Predicates)
谓语用于进一步限定选择的节点,放在方括号
[]中。-
按位置选择:xpath复制
//div[1]选择第一个div元素。 -
按属性选择:xpath复制
//div[@class='example']选择所有class属性值为example的div元素。 -
按文本内容选择:xpath复制
//div[text()='Hello']选择文本内容为Hello的div元素。
5. 通配符
-
*:匹配任何元素节点。xpath复制//*选择文档中的所有元素节点。 -
@*:匹配任何属性节点。xpath复制//@*选择文档中的所有属性节点。
6. 轴(Axes)
轴用于定义选择的方向,常见的轴包括:
-
child:选择子节点。xpath复制
child::div -
parent:选择父节点。xpath复制
parent::* -
ancestor:选择祖先节点。xpath复制
ancestor::div -
descendant:选择后代节点。xpath复制
descendant::div -
following-sibling:选择后续兄弟节点。xpath复制
following-sibling::div -
preceding-sibling:选择前面兄弟节点。xpath复制
preceding-sibling::div
7. 逻辑运算符
-
and:逻辑与。xpath复制//div[@class='example' and @id='test'] -
or:逻辑或。xpath复制//div[@class='example' or @id='test'] -
not():逻辑非。xpath复制//div[not(@class)]
8. 函数
XPath提供了许多内置函数,用于更复杂的查询:
-
contains():检查文本或属性是否包含特定值。xpath复制//div[contains(@class, 'example')] -
starts-with():检查文本或属性是否以特定值开头。xpath复制//div[starts-with(@class, 'ex')] -
count():计算节点的数量。xpath复制count(//div) -
normalize-space():去除文本节点中的多余空格。xpath复制normalize-space(//div)
9. 组合使用
XPath可以组合多种语法和方法来实现复杂的查询。例如:
xpath复制
//div[@class='example' and contains(text(), 'Hello')]
选择所有
class为example且文本内容包含Hello的div元素。10. 注意事项
-
大小写敏感:XPath对元素名、属性名等是大小写敏感的。
-
默认命名空间:如果文档使用了默认命名空间,可能需要额外的处理来匹配元素。
-
性能优化:尽量使用更具体的路径表达式,避免使用过于宽泛的
//,以提高查询性能。
XPath是一种非常强大的工具,通过灵活运用上述方法,可以高效地从XML或HTML文档中提取所需信息。

浙公网安备 33010602011771号