Hoy mismo en uno de mis proyectos me surgió un problema de que necesitaba obtener el Html que tenía almacenado en un objeto DOMElement. Buscando por la documentación de PHP he podido encontrar la solución, que compartiré con ustedes ya que he tardado bastante tiempo en obtener el Html de un objeto DOMElement y así os ahorro ese tiempo. No existe método para realizar el paso de DOMElement a Html de forma nativa, pero existe una forma que consiste en crear un nuevo objeto DOMDocument y en él clonarle el nodo del que queremos obtener el HTML, para posteriormente almacenarlo en una variable.
Html que obtendremos mediante DOMDocument
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="es-ES">
<head>
<title>Ejemplo</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="language" content="es" />
</head>
<body>
<table>
<tr><td>Soy una</td></tr>
<tr><td>tabla</td></tr>
</table>
</body>
</html>
Ejemplo práctico en PHP para obtener Html de un DOMElement
<?php
// Variables
$dcDocument = new DOMDocument();
$dmTabla = null;
// Cargamos el HTML
$dcDocument->loadHTML( "<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="es-ES">
<head>
<title>Ejemplo</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="language" content="es" />
</head>
<body>
<table>
<tr><td>Soy una</td></tr>
<tr><td>tabla</td></tr>
</table>
</body>
</html>" );
// Nos posicionamos en la tabla
$dmTabla = $dcDocument->getElementsByTagName( "table" )->item(0);
// Pintaremos solo la tabla pasando el objeto DOMElement para obtener el Html
echo getHtml( $dmTabla );
function getHtml($dcNode)
{
$dcAux = new DOMDocument( "1.0" );
$dcNodeAux = $dcAux->importNode( $dcNode->cloneNode( true ), true );
$dcAux->appendChild($dcNodeAux);
return $dcAux->saveHTML();
}
?>
Función que realiza el paso DOMElement to Html
function getHtml($dcNode)
{
$dcAux = new DOMDocument( "1.0" );
$dcNodeAux = $dcAux->importNode( $dcNode->cloneNode( true ), true );
$dcAux->appendChild($dcNodeAux);
return $dcAux->saveHTML();
}
Una sencilla solución basada en el comentario de Daniel Morlock en la documentación de PHP.
-
Warning: PDO [2002] Argumento inválido Publicado por Sampedro el día 02/03/2010
Guardado en Desarrollo -
Como mostrar acentos en HTML Publicado por Sampedro el día 16/02/2010
Guardado en Desarrollo -
Dibujar figuras en PHP GD Publicado por Sampedro el día 01/02/2010
Guardado en Desarrollo, Php -
Benchmark de PHP Publicado por Sampedro el día 12/01/2010
Guardado en Desarrollo -
Crear imágenes en Html mediante Php GD Publicado por Sampedro el día 05/01/2010
Guardado en Desarrollo