可以使用XPath选择br
元素之前和之后的所有h3
标记吗?
这仅选择第一个br
标记://h3/following-sibling::*[1][name()='br']
以下是代码段,我想选择之前的2个br
代码和br
代码后的2个h3
代码:
<br />22111 Hamburg<br />(U- und Busbahnhof Billstedt)<br /><br /><h3>Wir treffen uns</h3><br /><br />um Erfahrungen auszutauschen...
答案 0 :(得分:4)
备注:强>
h3
元素,而是一个
特别是h3
元素。[1]
仅导致选择下一个兄弟姐妹。*[name()='br']
,请使用br
。following-sibling
,而不是following
。然后是这个XPath,
//h3[.='Heading']/following-sibling::br
会选择所有br
元素为h3
元素的兄弟元素,其字符串值为Heading
。
对于此HTML,
<div>
<br/>22111 Hamburg<br/>
(U- und Busbahnhof Billstedt)
<br/><br/>
<h3>Wir treffen uns</h3>
<br/><br/>
um Erfahrungen auszutauschen...
<br/>abc<br/>
</div>
此XPath将在目标br
之前立即选择两个h3
兄弟元素,
//h3[.='Wir treffen uns']/preceding-sibling::br[position() < 3]
此XPath将在目标br
之后立即选择两个h3
兄弟元素,
//h3[.='Wir treffen uns']/following-sibling::br[position() < 3]
如果你想同时抓住所有4个,你可以通过|
将之前的和之后的 XPath表达式结合起来:
//h3[.='Wir treffen uns']/preceding-sibling::br[position() < 3]
|
//h3[.='Wir treffen uns']/following-sibling::br[position() < 3]
如果您希望数字范围包括所有节点,而不仅仅是br
元素,则在计数时,请使用此XPath:
//h3[.='Wir treffen uns']/preceding-sibling::node()[position() < 3][self::br]
|
//h3[.='Wir treffen uns']/following-sibling::node()[position() < 3][self::br]
首先测试node()
位置,然后通过br
确保范围内的那些节点是[self::br]
元素。请注意,所有文本节点都将计数,即使只包含空格。