#php #xpath
#php #xpath
Вопрос:
Структура 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>
Как я могу получить все разделы (с классом «row»), где предыдущий заголовок (h1) соответствует моему $search
?
То, что у меня есть прямо сейчас (не работает для последнего элемента, а также не останавливается на следующем заголовке):
//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>
Ответ №1:
Это длинный:
//div[contains(concat(" ",@class," ")," row ")][preceding-sibling::div[contains(concat(" ",@class," ")," title ")][1][contains(h1,"<?php echo $search ?>")]]
Я разобью его на части:
Вам нужны все divs, у которых есть строка класса…
//div[contains(concat(" ",@class," ")," row ")]
чей первый предшествующий брат с названием класса…
[preceding-sibling::div[contains(concat(" ",@class," ")," title ")][1]
имеет h1, который содержит ваш поисковый запрос
[contains(h1,"<?php echo $search ?>")]]