Xpath获取2个元素之间的元素,我们不能使用id或text来标识第二个标记

时间:2017-08-30 17:02:56

标签: html xpath boolean-logic

我对这个问题Xpath Get elements that are between 2 elements也有类似的问题。但在我的具体情况下,html可能会有所不同,我不能使用第二个元素的文本

基本上我的结构如下:

<h1>Account Information</h1>
<a class="null" href="http:...">Remarks</a>
<a class="null" href="http:...">Owner Information</a>
<b>Account Detail</b>
<a class="null" href="http:...">Industrial</a>

<a class="null" href="http:...">land</a>
<b >Transfers</b>
<a class="null" href="http:...">11111</a>
<a class="null" href="http:...">22222</a>

所以我希望在b ='帐户详细信息'和可以改变文字的下一个b之间获取<a>

对于这种情况,我使用了2nd answer of question above

的版本
//a[preceding-sibling::b='Account Detail' and following-sibling::b]

对于这种情况可行,因为在b ='帐户明细'后只有一个b 我得到了

  

[工业,土地]

但是,如果我们在b ='帐户明细'后面有多个<b>

但如果我们有多个<b>

<h1>Account Information</h1>
<a class="null" href="http:...">Remarks</a>
<a class="null" href="http:...">Owner Information</a>
<b>Account Detail</b>
<a class="null" href="http:...">Industrial</a>    
<a class="null" href="http:...">land</a>
<b class="">Permits</b>
 <a class="null" href="http:...">12-12-222</a>
 <a class="null" href="http:...">22-2-22</a>
<b >Transfers</b>
<a class="null" href="http:...">11111</a>
<a class="null" href="http:...">22222</a>

结果是:

  

[工业,土地,12-12-222,22-2-22]

这不是理想的行为

有什么建议吗? 提前谢谢

1 个答案:

答案 0 :(得分:1)

尝试使用以下XPath来获取所需的节点:

//a[preceding-sibling::b[1]='Account Detail' and following-sibling::b]

preceding-sibling::b[1]='Account Detail'打算在<b>内容

之前获取没有前兄弟'Account Detail'的锚点