#php #dom #xpath
#php #dom #xpath
Вопрос:
У меня есть известное имя класса Div, и я могу получить внутренний html-код, все хорошо, но как мне получить следующее имя класса Div (не внутреннее из известного класса Div), используя php, dom document и xpath? Например, с помощью приведенного ниже кода, если я знаю класс Div «мобильный контейнер mobile-filter-container», как мне вернуть «мобильный контейнер mobile-cart-content-container»?
<div class="mobile-container mobile-filter-container">
<div class="mobile-wrapper-header"></div>
<div class="mobile-filter-wrapper"></div>
</div>
<div class="mobile-container mobile-cart-content-container">
<div class="mobile-wrapper-header">
Спасибо,
Комментарии:
1. Можете ли вы добавить, как вы на самом деле получаете первый div и что вы пытались получить во втором?
2. В моем случае с первым классом div я уже знаю его имя и получаю его содержимое с помощью включенной функции, которая работает (я передаю документ dom в качестве параметра функции), но я не знаю имени следующего, и мне трудно понятькак это получить, спасибо: function Bn($dom){ $xpath = новый DOMXPath($dom); $classname = «knownClassname»; $div = $xpath->запрос («//div[@id='» . $classname . «‘]»); $div = $div->item(0); $bn = $dom-> saveHTML($div); верните $ bn; }
Ответ №1:
Я считаю, что это должно приблизить вас к тому, что вам нужно:
$data = <<<DATA
<html>
<div class="mobile-container mobile-filter-container">
<div class="mobile-wrapper-header"></div>
<div class="mobile-filter-wrapper"></div>
</div>
<div class="mobile-container mobile-cart-content-container">
<div class="mobile-wrapper-header"></div>
<div class="mobile-filter-wrapper"></div>
</div>
<div class="unwanted">
<div class="mobile-wrapper-header"></div>
<div class="mobile-filter-wrapper"></div>
</div>
</html>
DATA;
$doc = new DOMDocument();
$doc->loadHTML($data);
$xpath = new DOMXpath($doc);
$elements = $xpath->query('.//div[@class="mobile-container mobile-filter-container"]/following-sibling::div[1]/@class');
echo $elements[0]->nodeValue;
Вывод:
mobile-container mobile-cart-content-container
Комментарии:
1. Спасибо, Джек, именно то, что я искал 🙂