Как получить следующую информацию в xpath?
Текст 01 – link_1.com
Текст 02 – link_2.com
$page = ' <div class="news"> <div class="content"> <div> <span class="title">Text 01</span> <span class="link">link_1.com</span> </div> </div> <div class="content"> <div> <span class="title">Text 02</span> <span class="link">link_2.com</span> </div> </div> </div>'; @$this->dom->loadHTML($page); $xpath = new DOMXPath($this->dom); // perform step #1 $childElements = $xpath->query("//*[@class='content']"); $lista = ''; foreach ($childElements as $child) { // perform step #2 $textChildren = $xpath->query("//*[@class='title']", $child); foreach ($textChildren as $n) { echo $n->nodeValue.'<br>'; } $linkChildren = $xpath->query("//*[@class='link']", $child); foreach ($linkChildren as $n) { echo $n->nodeValue.'<br>'; } }
Мой результат возвращается
Текст 01
Текст 02
link_1.com
link_2.com
Текст 01
Текст 02
link_1.com
link_2.com
Замените //
descendant::
во втором и третьем xpath, потому что //
сообщает xpath искать этот элемент evrywhere в xml, а не в определенном узле (по мере необходимости), а $ child НЕ является отдельным XML. descendat::
означает любой дочерний узел
@$this->dom->loadHTML($page); $xpath = new DOMXPath($this->dom); // perform step #1 $childElements = $xpath->query("//*[@class='content']"); $lista = ''; foreach ($childElements as $child) { // perform step #2 $textChildren = $xpath->query("descendant::*[@class='title']", $child); foreach ($textChildren as $n) { echo $n->nodeValue.'<br>'; } $linkChildren = $xpath->query("descendant::*[@class='link']", $child); foreach ($linkChildren as $n) { echo $n->nodeValue.'<br>'; } }