node ejemplo domnode domelement child attribute php dom innerhtml

php - ejemplo - ¿Cómo obtener innerHTML de DOMNode?



php domelement get attribute (6)

¿Qué función usas para obtener innerHTML de un DOMNode dado en la implementación PHP DOM? ¿Alguien puede dar una solución confiable?

Por supuesto, externalHTML también lo hará.


Además de la buena versión de array_map con array_map e array_map pero esta vez con array_reduce :

return array_reduce( iterator_to_array($node->childNodes), function ($carry, /DOMNode $child) { return $carry.$child->ownerDocument->saveHTML($child); } );

Aún no entiendo, por qué no hay un método de reduce() que acepte arreglos e iteradores por igual.


Aquí hay una versión en un estilo de programación funcional :

function innerHTML($node) { return implode(array_map([$node->ownerDocument,"saveHTML"], iterator_to_array($node->childNodes))); }


Para devolver el html de un elemento, puede usar C14N() :

$dom = new DOMDocument(); $dom->loadHtml($html); $x = new DOMXpath($dom); foreach($x->query(''//table'') as $table){ echo $table->C14N(); }


Una versión simplificada de la respuesta de Haim Evgi:

<?php function innerHTML(/DOMElement $element) { $doc = $element->ownerDocument; $html = ''''; foreach ($element->childNodes as $node) { $html .= $doc->saveHTML($node); } return $html; }

Ejemplo de uso:

<?php $doc = new /DOMDocument(); $doc->loadHTML("<body><div id=''foo''><p>This is <b>an <i>example</i></b> paragraph<br>/n/ncontaining newlines.</p><p>This is another paragraph.</p></div></body>"); print innerHTML($doc->getElementById(''foo'')); /* <p>This is <b>an <i>example</i></b> paragraph<br> containing newlines.</p> <p>This is another paragraph.</p> */

No es necesario configurar preserveWhiteSpace o formatOutput .


Compare esta variante actualizada con la Nota de usuario manual de PHP # 89718 :

<?php function DOMinnerHTML(DOMNode $element) { $innerHTML = ""; $children = $element->childNodes; foreach ($children as $child) { $innerHTML .= $element->ownerDocument->saveHTML($child); } return $innerHTML; } ?>

Ejemplo:

<?php $dom= new DOMDocument(); $dom->preserveWhiteSpace = false; $dom->formatOutput = true; $dom->load($html_string); $domTables = $dom->getElementsByTagName("table"); // Iterate over DOMNodeList (Implements Traversable) foreach ($domTables as $table) { echo DOMinnerHTML($table); } ?>


function setnodevalue($doc, $node, $newvalue){ while($node->childNodes->length> 0){ $node->removeChild($node->firstChild); } $fragment= $doc->createDocumentFragment(); $fragment->preserveWhiteSpace= false; if(!empty($newvalue)){ $fragment->appendXML(trim($newvalue)); $nod= $doc->importNode($fragment, true); $node->appendChild($nod); } }