You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何定位被br标签分隔的双词文本的XPath?面试求助

正确定位被<br>分隔的两个单词的XPath写法

嘿,我来帮你搞定这个XPath的问题!首先得明确我们要处理的HTML结构大概是什么样的——比如类似这样:

<p>Apple<br>Banana</p>
<div>Orange<br>Mango</div>

你之前用contains()+AND或者following::轴没成功,大概率是因为这些写法没有精准匹配到“两个单词被<br>直接分隔”这个核心条件,要么范围太宽,要么没约束节点关系。

下面给你几种精准的写法,根据你的需求选择:

1. 定位包含目标文本对的父元素

如果你的目标是找到同时包含Word1和Word2,且两者被<br>分隔的父元素,可以用这种写法:

//*[text()[1]='Word1' and text()[2]='Word2' and child::br[position()=1]]

解释:

  • text()[1]='Word1':指定父元素下的第一个文本节点是Word1
  • text()[2]='Word2':第二个文本节点是Word2
  • child::br[position()=1]:父元素下的第一个子元素是<br>,确保两个文本被它分隔

比如针对上面的HTML例子,要找包含Apple<br>Banana的<p>,就用:

//p[text()[1]='Apple' and text()[2]='Banana' and child::br[position()=1]]

2. 直接定位第二个单词的文本节点

如果你需要直接定位到Word2这个文本节点(前提是它前面紧邻<br>,而<br>前面是Word1),可以用兄弟轴精准匹配:

//text()[.='Word1']/following-sibling::br[1]/following-sibling::text()[1][.='Word2']

解释:

  • //text()[.='Word1']:先找到内容为Word1的文本节点
  • /following-sibling::br[1]:取它的第一个后续兄弟节点,必须是<br>
  • /following-sibling::text()[1][.='Word2']:再取<br>的第一个后续兄弟文本节点,内容必须是Word2

为什么你之前的方法不对?

  • contains()+AND:比如//*[contains(text(),'Word1') and contains(text(),'Word2')]会匹配到像<p>Word1 some text Word2</p>这种没有<br>的元素,完全没约束分隔条件,所以会出错。
  • following::轴:如果只是写//text()[.='Word1']/following::text()[.='Word2'],会匹配所有Word1后面的Word2,不管中间隔了多少元素,根本没限定中间是<br>,自然不符合要求。

内容的提问来源于stack exchange,提问作者Pratiksha Jadhav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:23:17