2016-07-08 24 views
1

Ich versuche, die DOM-Elemente von externen Seiten zu erhalten. Basierend auf anderen Beiträgen Ich versuche:domDocument gibt keine Knoteninformationen zurück

$html = htmlentities(file_get_contents('http://www.slate.com'));  
$dom = new domDocument; 
$dom->loadHTML($html); 
echo "<pre>"; 
var_dump($dom); 
echo "</pre>"; 

(Html ​​entites Warnungen tötet, aber ansonsten hat das gleiche Ergebnis, wie es aus zu verlassen).

Basierend auf dem, was ich gelesen habe, sollte dies verschiedene DOM-Teile in Eltern/Kind-Knoten zurückgeben. Aber das Ergebnis des obigen Codes enthält keine DOM-Knoten, nur ein riesiges "textContent" -Element, das den gesamten Seiten-HTML-Code enthält.

Vielen Dank im Voraus für Gedanken, was ich falsch mache.

+0

Wenn Sie Warnungen 'libxml_use_internal_errors verwenden, um sisable wollen (true)'. Du kannst DomDocument nicht nach 'htmlentities' laden. – splash58

Antwort

1

Sie suchen

$dom->documentElement 

dies eine Rückkehr

DOMNode 

Objekt.

Auch: Entfernen Sie die htmlentities, weil dies den HTML-Code durcheinander bringen wird, den Sie holen. Beispiel: < wird &lt erhalten, was Ihre loadHTML nicht als < interpretieren wird. Schauen Sie sich auf: Disable warnings when loading non-well-formed HTML by DomDocument (PHP)

Dummy-Dump:

function dump(DOMNode $node) 
{ 
    echo $node->nodeName; 
    if ($node->hasChildNodes()) 
    { 
     echo '<div style="margin-left:20px; border-left:1px solid black; padding-left: 5px;">'; 
     foreach ($node->childNodes as $childNode) 
     { 
      dump($childNode); 
     } 
     echo '</div>'; 
    } 
} 

dump($dom->documentElement); 

Welche wie folgt aussieht:

Dummy-Dump

+0

Bekam mich wohin ich gehen musste. Vielen Dank! – daprezjer