Найти имя следующего класса Div после имени родительского класса div, используя php / dom /xpath?

#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. Спасибо, Джек, именно то, что я искал 🙂