Buenas gentes, no los quiero engañar con el titulo, pero no se como titular este problemita que estoy teniendo. Estube buscando info y no hay gran cosa sobre el tema. Quizas a alguien se le ocurra alguna idea por que la verdad no parece tener solucion.
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 originalpublic 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.