web-dev-qa-db-fra.com

Comment obtenir le code html du nœud DOMElement?

J'ai ce code html:

<html>
    <head>
    ...
    </head>
<body>
    <div>
    <div class="foo" data-type="bar">
        SOMECONTENTWITHMORETAGS
    </div>
    </div>
</body>

Je peux déjà obtenir l'élément "foo" (mais seulement son contenu) avec cette fonction:

private function get_html_from_node($node){
  $html = '';
  $children = $node->childNodes;

  foreach ($children as $child) {
    $tmp_doc = new DOMDocument();
    $tmp_doc->appendChild($tmp_doc->importNode($child,true));
    $html .= $tmp_doc->saveHTML();
  } 
  return $html;
}

Mais je voudrais retourner toutes les balises html (y compris ses attributs) de DOMElement. Comment je peux faire ça?

30
Xaver

Utilisez l'argument facultatif pour DOMDocument::saveHTML : cela dit "afficher cet élément uniquement".

return $node->ownerDocument->saveHTML($node);

Notez que l'argument n'est disponible qu'à partir de PHP 5.3.6. Avant cela, vous devez utiliser DOMDocument::saveXML à la place. Les résultats peuvent être légèrement différents. De plus, si vous avez déjà une référence au document, vous pouvez simplement le faire:

$doc->saveHTML($node);
61
lonesomeday