Php Xpath - How to get two information in a child node

How to get the following information in xpath?

Text 01 - link_1.com

Text 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>'; } } 

My result returns

Text 01

Text 02

link_1.com

link_2.com

Text 01

Text 02

link_1.com

link_2.com

+1
source share
1 answer

Replace // with descendant:: in the second and third xpath, because // tells xpath to search for this evrywhere element in xml, and not in a specific node (as needed), and $ child is NOT a separate XML, descendat:: means any node child

 @$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>'; } } 
+5
source

Source: https://habr.com/ru/post/900095/


All Articles