Autor Zpráva
filio
Profil *
Zdravím,

opravdu, už si nevím rady. S XPath teprve začínám. Nikde na internetu to nemůžu dohledat.
Jak získat jednu proměnnou to vím, ale jak jich získat více z $nodelist to nevím.

Potřeboval bych načíst data z HTML do proměnných: $nadpis, $textBold, $link. Mockrát děkuji za každou radu.


<?php

$html = <<<HTML
<html>
<head>
<title>A test page</title>
</head>
<body>

<div class='item'>
<div class='title'><h3>1. nadpis<h3><title>
<b>1. Text bold</b>
<a href="http://www.example.com">1. link</a>
</div>

<div class='item'>
<div class='title'><h3>2. nadpis <h3><title>
<b>2. Text bold</b>
<a href="http://www.example.com">2. link</a>
</div>



</body>
</html>
HTML;

$htmlDoc = new DOMDocument();
$htmlDoc->loadHTML($html);

$xpath = new DOMXPath($htmlDoc);
$nodelist = $xpath->query("//div[@class='item']");

foreach ($nodelist as $n){
       echo $n->nodeValue."<br />";
 
 //echo $nadpis;
 //echo $textBold;
 //echo $link;      
}


?>
filio
Profil *
Tak nakonec mi poradil kolega. Chyba byla také v HTML, které se mělo parsovat na místo <title> má být samozřejmě </div>.
Funkční řešení přikládám níže. V Diskusi můžete zamknout.

<?php

$html = <<<HTML
<html>
<head>
<title>A test page</title>
</head>
<body>

<div class='item'>
<div class='title'><h3>1. nadpis<h3></div>
<b>1. Text bold</b>
<a href="http://www.example.com">1. link</a>
</div>

<div class='item'>
<div class='title'><h3>2. nadpis <h3></div>
<b>2. Text bold</b>
<a href="http://www.example.com">2. link</a>
</div>



</body>
</html>
HTML;

$htmlDoc = new DOMDocument();
$htmlDoc->loadHTML($html);

$xpath = new DOMXPath($htmlDoc);
$nodelist = $xpath->query("//div[@class='item']");



foreach ($nodelist as $n){
    
$nadpis = $xpath->evaluate('string(div[@class="title"]/h3)', $n); 
$textBold = $xpath->evaluate('string(b[1])', $n); 
$link = $xpath->evaluate('string(a[1]/@href)', $n);
 
 echo $nadpis.'<br /> ';
 echo $textBold.'<br />';
 echo $link.'<br /> ';      
}


?>

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: