GetSimple modificando el escritor de XML

Dado que versionar archivos XML que están todo en una sola línea es absurdo estoy intentando modificar el GETSIMPLE para que escriba los TAGS XML separados por retornos de carro.

Primero buscqué en el foro oficial para tener un pista de por donde tocar XML tags

Pocos resultados, el más prometedor

http://get-simple.info/forums/showthread.php?tid=1593&highlight=XML+tags

donde hablas del SimpleXML el parser

Con esto hago una búsqueda de cadena en los archivos

SimpleXML

Y saltan varios. Uno de ellos, changedata.php, me llama la atención.

Aquí encuentro una parte del código con $xml => asXML ($filem) que me parece es la clave.

Manos a la obra

La primera prueba fue realizar la modificación antes de que los datos sean grabados, convirtiendo el XML en STRING, hacer los remplazos y volver a convertir.

Busco de nuevo: https://duckduckgo.com/?q=asXML

y llego a la fuente php.net

http://php.net/manual/es/simplexml.examples-basic.php

http://php.net/manual/es/simplexmlelement.tostring.php

Me encuentro con que la clase tienen ya los métodos para realizar esto de convertir de un tipo a otro y hago mi primer intento a lo bruto

Hay que insertar una nueva línea, como siempre me olvido, consulto aquí

    // --- INI PARCHE Insertar retornos entre TAGs XMLS
    $xmlStringTmp = $xml->asXML();
    $xmlStringTmp = str_replace("><",">\n<",$xmlStringTmp);
    $xml = new SimpleXMLElement($xmlStringTmp);
    // --- FIN PARCHE
    
     $xml->asXML($filem);

Y… rompe todo, creo que el problema es que a lo bruto separa los <![CDATA[]>, pero también inserta lineas en otras partes donde no debería.

Investigando un poco más cómo carga los archivos el GetSimple descubro el file_get_contents($file); y para mi gusto también existe file_put_contents($file);

Así que en el segundo intento vamos con cargar el XML que ya grabó en un string, modificarlo aprovechando cuidar lo de <![CDATA[]>, y luego escribir el archivo otra vez, entonces:

(nótece que vamos después del $xml->asXML )

    $xml->asXML($filem);
    
    /* 
    --- INI PARCHE Insertar lineas entre TAGs XMLS
    
    Dado que al manipular el string obtenido del objeto XML
    se generaba cosas extrañas y "rompía" un poco el formato
    del XML que espera GetSimple se optó por recargar el archivo
    y luego modificarlo, teniendo la precación de sólo insertar entre
    los <TAGS> y no los <![DACA[]]>
    
    */

    $tmpXMLfile = file_get_contents($filem);
    $tmpNTC = "###NO_TOCA_BOTON###";
    
    // Insertamos los seguros para no romper los CDATA
    $tmpXMLfile = str_replace("><![CDATA",">$tmpNTC<![CDATA",$tmpXMLfile);
    $tmpXMLfile = str_replace("]]></","]]>$tmpNTC</",$tmpXMLfile);
    
    // Agregamos las nuevas líneas \n entre ><
    $tmpXMLfile = str_replace("><",">\n<",$tmpXMLfile);
    
    // Quitamos los seguros
    $tmpXMLfile = str_replace("$tmpNTC","",$tmpXMLfile);
    file_put_contents($filem,$tmpXMLfile);    
    
    // --- FIN PARCHE

Y… funciona como una seda! Chau.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s