XPath"跟随兄弟姐妹之前"

Ond*_*tny 3 xpath html-agility-pack

我正在尝试使用XPath 1.0(或可能与Regex一起)选择元素(a),这些元素遵循特定元素(b)的兄弟,但仅在另一个b元素之前.

<img><b>First</b><br>&nbsp;&nbsp;
<img>&nbsp;&nbsp;<a href="/first-href">First Href</a> - 19:30<br>
<img><b>Second</b><br>&nbsp;&nbsp;
<img>&nbsp;&nbsp;<a href="/second-href">Second Href</a> - 19:30<br>
<img>&nbsp;&nbsp;<a href="/third-href">Third Href</a> - 19:30<br>
Run Code Online (Sandbox Code Playgroud)

我试图使样本尽可能接近现实世界.所以在这种情况下,当我在元素

<b>First</b>
Run Code Online (Sandbox Code Playgroud)

我需要选择

<a href="/first-href">First Href</a> 
Run Code Online (Sandbox Code Playgroud)

当我在

<b>Second</b> 
Run Code Online (Sandbox Code Playgroud)

我需要选择

<a href="/second-href">Second Href</a> 
<a href="/third-href">Third Href</a>
Run Code Online (Sandbox Code Playgroud)

知道如何实现吗?谢谢!

Tom*_*lak 5

动态创建此XPath:

following-sibling::a[preceding-sibling::b[1][.='xxxx']]
Run Code Online (Sandbox Code Playgroud)

其中'xxxx'被替换为当前的文本<b>.

这假设所有元素实际上都是兄弟姐妹.如果不是,您可以尝试使用precedingfollowing轴,或者编写更具体的XPath,更好地类似于文档结构.

在XSLT中,您还可以使用:

following-sibling::a[
  generate-id(preceding-sibling::b[1]) = generate-id(current())
]
Run Code Online (Sandbox Code Playgroud)