Xpath问题总结

这篇博客总结了XPath的使用,包括其在XML文档中的导航作用、路径表达式的构造,如绝对路径、相对路径和属性选择。讨论了XPath的效率问题,指出从根节点开始的路径表达式效率最高,而相对路径中避免使用高频元素作为起点。还提到了XPath的一些陷阱,如不能跨级选择、利用'|'操作符简化解析,并提醒注意命名空间。最后推荐了Firefox和Chrome的XPath检查工具。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.什么是xpath

Xpath使用路径表达式在XML文档中进行导航,解析到路径跟踪到的XML元素。

2.xpath路径表达式

路径表达式是xpath的传入参数,xpath使用路径表达式对XML文档中的节点(或者多个节点)进行定位。

路径表达式类似这种:/html/body/div[@class=”content”] (稍后解释规则)

3.路径表达式有如下几种常见的组成结构

比较推荐的xpath Manual

1.绝对路径方式(从根节点开始导航)

绝对路径方式是从根节点开始选取,然后一级一级的往想要去的节点导航。以”/”开始。这种参数会让xpath有着更高的效率,稍后会做解释。

2.相对路径方式

这种方式不用考虑相对于根节点,想要查找的节点的所有级别路径,只需要知道当前节点或者当前节点的上下几个级别的节点即可,在人为查找路径的时候,会更方便一些。

3.属性结构

因为一个XML文档可能有多个相同标签在同一级别,例如下面这个例子

<?xml version="1.0" encoding="ISO-8859-1"?>

<div id=”all”>

<div class=”figure-1”>

<title lang="eng">Harry Potter</title>

<p>29.99</p>

</div>

<div class=”figure-2”>

<title lang="eng">Learning XML</title>

<p>39.95</p>

</div>

</div>

想要选择<div class=figure-1>这个标签的内容,需要对div标签进行更详细的说明,才能区别于其他的同级别标签(也有另外的方法)。’@’属性可以用在这里,路径表达式就是

//div[@class=figure-1] (这里选择相对方式)

4.路径表达式的几个小坑

0.效率问题

Xpath的路径表达式参数如果是从根元素开始的,一定是效率最高的。这点容易解释,省去了很多门口的辨别过程。

但是因为有时候从根元素开始并不好找(后来借助插件这个不成问题),或者是出于自己封装的解析函数的泛型化的要求,需要相对路径。那么相对路径的选择方式就值得思考了。

一下是我的一些思考,没参考过实现源码,但经过测试。

想到过相对路径如果往上级多写几层,应该会提升效率,但是测试之后,时间反而增加了2-3倍。

初始例子是这样的 '//span[@id="media_span"]/span', 

加了几层变成这样'//div/div/div/span[@id="media_span"]/span'

我觉得xpath的索引方式很可能像NTFS文件系统一样。统计过当篇的元素个数,span 20几个,而div90几个。

所以,相对路径,div这种极易出现的标签元素尽量不要放在起始节点。

从根节点开始解析比以上span开始的例子相比,只快了一点(错略测试多篇文档,10万次解析差2秒)。

1.不能跨级

在选择路径表达式的时候,不能出现跨级别的元素包含,否则路径表达式是不能被xpath解析的。

还拿上图举例,不可以写//div[@id=”all”]/title去解析div class=”figure-1”下面的title标签,这就是一种跨级。

2.可以使用’|’,简化解析

使用’|’操作符可以让xpath的在XML文档上按照多个路径表达式解析,在解析新闻网页的新闻条目时,很奏效。

例如,//div [@id="syncad_1"]/h1|//div [@id="syncad_1"]/p 可以对新浪新闻页做两次解析,对应或操作符的两个参数。Xpath解析结果如下图:

xpath

3.注意命名空间

XML遇上命名空间无法解析的时候,加上对应的命名空间即可(namespace上图也可参考)。更高级的操作方式可见手册。

4.最方便的查找路径方式

审查元素,右键copy xpathFirefoxchrome都适用),可以直接给出从根开始的xpath路径。

5.最后推荐几款插件

1.firfox下的xpath checker,输入xpath路径之后,给出解析结果,可以很好的判断路径的对错。需要注意的是当firefox加载新的网页之后要重新打开xpath checker,让它重新转换加载XML文档。

2.Chrome下的xpath finder也有类似功能。

3.Mac下的xpath explorer可以在网页中直接选取内容生成从根开始的xpath路径。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值