如何写一个XPath表达式

XPath

XPath的寻址逻辑

使用XPath表达式定位元素A时,需要先找初始节点,然后根据初始节点的上下文执行其他运算来找元素A。

选择初始节点

我们可以选择当前节点作为初始节点,也可以将文档根元素作为初始节点。

# 当前节点:句点+正斜杠
./

# 文档根元素:正斜杠后接星号
//

# 文档中的所有元素, 这个用法和谓词一起使用
//*
复制代码

在初始节点选择上下文

以一棵节点树为例

self是一个初始点
SELF是一个初始点

Untitled 1.png
初始点的子节点,用正斜杠表示:/

Untitled 2.png
初始节点的后代节点,用2个正斜杠表示: //

Untitled 3.png
初始节点的父节点,用2个句点表示: ..

使用谓词过滤节点集

谓词表达式只检查真假。如果节点集的节点与谓词的表示符相匹配,则此节点仍保留在结果节点集中。

Example

//address[ort=”Stuttgart”]

先选择出来所有的address元素,在这些元素中,只有ort子元素的值Stuggart的address元素才会被选择出来。

实例

<?xml version="1.0" encoding="UTF-8"?>
 
<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>

# 如果我们想要选取第一个book元素,我们可以选择初始节点为文档根元素,然后找第一个book元素:
//book[1]

# 如果我想定位第一个title元素,我们有以下3种方式
1. 将文档根元素选为初始节点,然后找第一个title元素://title[1]
2. 根据子元素title的值找到父元素book元素,然后定位子节点://*[title='Harry Potter']/title
3. 以所有元素为初始节点集,使用谓词(元素的属性值)来定位元素://*[@lang='eng'][1]

这里要注意:XPath里面的索引不是从0开始的,而是从1开始的。

复制代码

Tips

当一个html页面中,页面被分成了展示信息的几部分,每部分结构相同且这个页面没有id属性。这个时候,我们定位元素就可以通过元素值定位父元素作为初始元素。也就是实例2

References

www.data2type.de/en/xml-xslt…

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享