Xpath从平面HTML层次结构中获取元素


Xpath getting elements from flat HTML hierarchy

HTML结构:

<div class="title">
    <h1>Some title</h1>
</div>    
<div class="row">something</div>
... (repeats the same structure)
<div class="title">
    <h1>Another title</h1>
</div>    
<div class="row anotherclass">1 something</div>
<div class="row">2 something</div>
<div class="row">3 something</div>
<div class="title">
    <h1>Some title</h1>
</div>    
<div class="row">something</div>

如何获取上一个标题(h1(与我的$search匹配的所有div(带有"行"类(?

我现在拥有的(不适用于最后一个元素,也不适用于下一个标题(:

//div[child::h1[contains(text(), "<?php echo $search ?>")]]
/following-sibling::div[contains(concat(" ", normalize-space(@class), " "), " title ")]
/preceding-sibling::div[contains(concat(" ", normalize-space(@class), " "), " row ")]

如果我搜索"另一个标题",输出应该是:

<div class="row anotherclass">1 something</div>
<div class="row">2 something</div>
<div class="row">3 something</div>

这是一个很长的问题:

//div[contains(concat(" ",@class," ")," row ")][preceding-sibling::div[contains(concat(" ",@class," ")," title ")][1][contains(h1,"<?php echo $search ?>")]]

我会把它掰成碎片:

你想要所有有类行的div。。。

//div[contains(concat(" ",@class," ")," row ")]

第一个具有类标题的前一个同级。。。

[preceding-sibling::div[contains(concat(" ",@class," ")," title ")][1]

有一个h1,其中包含您的搜索查询

[contains(h1,"<?php echo $search ?>")]]