Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Diabliyo en 7 Febrero 2014, 17:36 pm



Título: [XML] Sustituir datos de una etiqueta ?
Publicado por: Diabliyo en 7 Febrero 2014, 17:36 pm
Buen dia.

Tengo un XML el cual cierta etiqueta tiene datos erroneos, y quisiera de forma automatica sustituir la informacion de dicha etiqueta para todos mis documentos XML.

Un ejemplo...

Tengo un XML por cada DIA este recopila las actividades que se hicieron en todo el dia, por defecto hay una etiqueta "Fecha" que es la fecha de creacion del XML (cuando inicio la lista de actividades), mas o menos asi:

Código:
<jornada>
      <eventos>
            <actividad>limpiar computadora</actividad>
            <actividad>visitar a X cliente</actividad>
      </eventos>
      <fecha>linux_time</fecha>
</jornada>

Quiero quitar el time linux y poner como atributo dos valores: timelinux y time estandarizado.

Hice un código que lee las etiquetas "fecha", convierte el time linux al formato que quiero, pero al momento de meterlo al XML me resultan 2 etiquetas :(

Código:
<jornada>
      <fecha>time_linux</fecha>
      <fecha timelinux="time_linux" time="MMDDYYYYTHH:MM:SS"></fecha>
      <eventos>
            <actividad>limpiar computadora</actividad>
            <actividad>visitar a X cliente</actividad>
      </eventos>
</jornada>

Como podría hacerlo sin hacer esa repetición ?

El código que hice fue:

Código
  1. <?php
  2. $path= 'directorio/';
  3. $file= 'elarchivo.xml';
  4. $carga= array( "linuxtime"=>"123456789123", "time"=>"MMDDYYYYTHH:MM:SS" );
  5.  
  6. $xml = new DOMdocument( "1.0", "UTF-8" );
  7. $xml->preserveWhiteSpace= FALSE;
  8. $xml->load($path.$file); # cargamos el XML
  9. $a= $xml->getElementsByTagName("jornada")->item(0); # buscamos elementos
  10. $jornada= $xml->createElement("fecha"); # creamos tag
  11. $a->appendChild($jornada);
  12. cargaAtt($jornada, $carga ); # cargamos atributos
  13. ?>

LA idea es obtener como resultado algo asi:

Código:
<jornada>
      <fecha timelinux="time_linux" time="MMDDYYYYTHH:MM:SS"></fecha>
      <eventos>
            <actividad>limpiar computadora</actividad>
            <actividad>visitar a X cliente</actividad>
      </eventos>
</jornada>


Título: Re: [XML] Sustituir datos de una etiqueta ?
Publicado por: EFEX en 7 Febrero 2014, 18:12 pm
Usa setAttribute('nombre', 'valor), creo que seria algo asi..
Código
  1. $jornada= $xml->createElement("fecha");
  2. $fecha = $a->appendChild($jornada);
  3. $fecha->setAttribute("linuxtime", "123456789123");
  4. $fecha->setAttribute("time", "MMDDYYYYTHH:MM:SS");

Y para que no este el otro elemento fecha, podes borrarlo de entrada con removeChild() o editarlo directamente sin tener que crear otro elemento fecha con getElementsByTagName().

https://php.net/manual/es/domnode.removechild.php