El tema es asi, hace tiempo vengo trabajando en un proyecto personal, convertir html en xml, procesarlo al xml y luego volverlo a convertir en html.
Entonces en php yo tengo una funcion que trabaja con simplexml_load_string y lo que hace es convertirme el html a xml. Luego con otra funcion recorro los elementos del xml y los meto a una variable.
La funcion de xml a html es la siguiente:
Código PHP:
Ver original
public static function xml2html($element){ $tempHtml='<'.$element->getName(); foreach($element->attributes() as $att => $value) { $tempHtml=$tempHtml.' '.$att.'="'.$value.'"'; } $children=$element->children(); //Si no tiene hijos if($children==null) //Se cierra el elemento inmediatamente y salta de linea $tempHtml=$tempHtml."/>"; else{//Si tiene hijos //Si tiene contenido el elemento if($element!="") //Cierra el tag del elemento y muestra el contenido $tempHtml=$tempHtml.">".$element; else //Cierra el tag del elemento y salta de linea $tempHtml=$tempHtml.">"; foreach($children as $child) $tempHtml=$tempHtml.self::xml2html($child); $tempHtml=$tempHtml."</".$element->getName().">"; } return $tempHtml; }
Finalmente tengo el script de pruebas:
Código PHP:
Ver original
<? $var='<!DOCTYPE><html><title>Hola mundo!</title><body><p>Esta <i>es</i> una <b>prueba!</b></p><br/><input type="text" value="Algo"/></body></html>'; $xml=xmlFunctions::html2xml($var); $html=xmlFunctions::xml2html($xml); echo $html; ?>
El problema es el siguiente, al realizar este parseo de html a xml y de vuelta a html el resultado obtenido es:
<html><title>Hola mundo!</title><body><p>Esta una <i>es</i><b>prueba!</b></p><br></br><input type="text" value="Algo"></input></body></html>
Contra lo que yo mande como html que es:
<html><title>Hola mundo!</title><body><p>Esta <i>es</i> una <b>prueba!</b></p><br/><input type="text" value="Algo"/></body></html>
No presten atencion a la falta del DOCTYPE.
Noten el orden en que quedaron las cosas dentro del parrafo.
Esto se debe a que en el codigo primero se pone el contenido del elemento p, que es "Esta una" y luego los hijos que son i y b.
En fin, alguien tiene alguna sugerencia de como resolver esto?
Gracias desde ya.