web-dev-qa-db-ja.com

DOMElementノードのHTMLコードを取得する方法

私はこのhtmlコードを持っています:

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

私はすでにこの関数で "foo"要素(ただしそのコンテンツのみ)を取得できます。

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

しかし、DOMElementのすべてのhtmlタグ(その属性を含む)を返したいのですが。どうすればできますか?

30
Xaver

オプションの引数を DOMDocument::saveHTML に使用します。これは、「この要素のみを出力する」と言います。

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

引数はPHP 5.3.6からのみ利用可能です。その前に、代わりに DOMDocument::saveXML を使用する必要があります。結果は少し異なる場合があります。また、ドキュメントへの参照がすでにある場合は、次のようにすることができます。

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