XPath是用于在XML和HTML文档中查找信息的语言,在实际的节点选择场景中,我们常常需要同时获取多个不同路径的节点,这时候XPath的|操作符就能发挥很大的作用。|操作符也叫并集操作符,它可以把多个XPath路径的结果合并起来,返回所有匹配节点的集合。
XPath |操作符的基础语法
|操作符的语法非常简单,只需要把多个XPath路径用|连接起来即可,格式如下:
路径1|路径2|路径3...
这里的每个路径都是独立的XPath表达式,最终的结果是所有路径匹配到的节点的并集,重复出现的节点只会被保留一次。需要注意的是,|操作符两边的路径是独立计算的,不会相互影响。
|操作符基础使用示例
假设我们有如下的XML文档,后续示例都基于这个文档进行演示:
<bookstore>
<book category="编程">
<title>Python基础教程</title>
<author>张三</author>
<price>89.00</price>
</book>
<book category="文学">
<title>散文精选</title>
<author>李四</author>
<price>45.00</price>
</book>
<magazine>
<name>科技周刊</name>
<price>12.00</price>
</magazine>
</bookstore>
示例1:选择所有book和magazine节点
如果我们想要同时获取bookstore下的所有book节点和magazine节点,就可以使用|操作符:
/bookstore/book|/bookstore/magazine
执行这个XPath表达式后,会返回两个book节点和一个magazine节点,总共三个节点。
示例2:选择所有title和author节点
如果我们需要获取文档中所有的title节点和author节点,可以这样写:
//title|//author
这个表达式会匹配到两个title节点和两个author节点,结果集合包含四个节点。
|操作符结合谓语的使用
|操作符可以和XPath的谓语(方括号中的过滤条件)结合使用,实现更精准的多路径选择。比如我们想要选择category为编程的book节点的title,以及所有magazine节点的name:
/bookstore/book[@category="编程"]/title|/bookstore/magazine/name
执行后返回的结果是<title>Python基础教程</title>和<name>科技周刊</name>两个节点,符合我们的筛选要求。
|操作符使用注意事项
- |操作符返回的是节点集合的并集,重复的节点只会保留一次,不会重复出现。
- 每个用|连接的路径都是独立计算的,路径之间不需要有层级关联,可以是完全不相关的路径。
- 如果某个路径没有匹配到任何节点,不会影响其他路径的结果,最终结果只包含匹配到的节点。
- 在HTML文档中使用时,同样适用,比如同时选择所有的<div>标签和<p>标签://div|//p。
HTML场景下的使用示例
假设我们有如下的HTML片段:
<div class="container"> <h1>标题内容</h1> <p class="intro">介绍文本</p> <span class="tip">提示信息</span> <p class="content">正文内容</p> </div>
如果我们想要同时选择所有的h1节点和class为intro的p节点,XPath表达式可以这样写:
//h1|//p[@class="intro"]
执行后会返回<h1>标题内容</h1>和<p class="intro">介绍文本</p>两个节点,满足我们的选择需求。
常见问题解答
问题1:|操作符和or关键字有什么区别?
or是XPath的逻辑运算符,用于谓语中的条件判断,比如//book[@category="编程" or @category="文学"],是选择满足其中一个条件的book节点;而|操作符是合并多个路径的结果,两者的使用场景完全不同。
问题2:|操作符可以连接多少个路径?
|操作符没有路径数量的限制,可以根据需要连接任意多个路径,只需要用|依次分隔即可。