¿Cómo obtener el HTML interno de DOMNode?

Resuelto Dawid Ohia asked hace 54 años • 11 respuestas

¿Qué función utiliza para obtener el HTML interno de un DOMNode determinado en la implementación PHP DOM? ¿Alguien puede dar una solución confiable?

Por supuesto, el HTML externo también servirá.

Dawid Ohia avatar Jan 01 '70 08:01 Dawid Ohia
Aceptado

Compare esta variante actualizada con la nota de usuario n.° 89718 del manual de PHP :

<?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); 
} 
?> 
Haim Evgi avatar Jan 18 '2010 15:01 Haim Evgi

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)));
}
trincot avatar Aug 28 '2016 16:08 trincot

Para devolver el valor htmlde un elemento, puede usar C14N() :

$dom = new DOMDocument();
$dom->loadHtml($html);
$x = new DOMXpath($dom);
foreach($x->query('//table') as $table){
    echo $table->C14N();
}
Pedro Lobito avatar May 13 '2016 19:05 Pedro Lobito