【问题标题】:Xpath getting elements from flat HTML hierarchyXpath 从平面 HTML 层次结构中获取元素
【发布时间】:2014-07-03 14:52:02
【问题描述】:

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>

【问题讨论】:

    标签: php xpath


    【解决方案1】:

    有点长:

    //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 ?>")]]
    

    【讨论】:

      猜你喜欢
      • 2021-07-29
      • 1970-01-01
      • 1970-01-01
      • 2013-06-27
      • 1970-01-01
      • 2019-10-03
      • 1970-01-01
      • 1970-01-01
      • 2022-11-03
      相关资源
      最近更新 更多