Foros del Web » Programación para mayores de 30 ;) » Programación General »

xml a txt

Estas en el tema de xml a txt en el foro de Programación General en Foros del Web. Hola. Amigos necesito exportar un xml a txt, el problema es que son aprox. unos 3000 archivos. todos con formato identico. lo otro es que ...
  #1 (permalink)  
Antiguo 11/07/2007, 10:02
 
Fecha de Ingreso: octubre-2004
Ubicación: Santiago de Chile
Mensajes: 504
Antigüedad: 19 años, 7 meses
Puntos: 0
De acuerdo xml a txt

Hola. Amigos necesito exportar un xml a txt, el problema es que son aprox. unos 3000 archivos. todos con formato identico.
lo otro es que noi me manejo mucho con perl, y ademas no tengo tiempo. es decir si alghuno tuviera la paciencia de decirme como estaria muy agradecido.
Atte.
MG

__________________
Dios es mas grande que tu problema :-)
  #2 (permalink)  
Antiguo 11/07/2007, 11:19
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 3 meses
Puntos: 90
Re: xml a txt

es fácil, simplemente tienes que parsear cada XML con algún parser como el

http://search.cpan.org/~grantm/XML-S.../XML/Simple.pm

y guardarlo en txt...abriéndolo simplemente ya lo guarda, como ser

open(FILE, ">$file");
print FILE $codigoparaarchivo;
close(FILE);

Espero que te sirva

Saludos
__________________
Esteban Quintana
  #3 (permalink)  
Antiguo 11/07/2007, 14:23
 
Fecha de Ingreso: octubre-2004
Ubicación: Santiago de Chile
Mensajes: 504
Antigüedad: 19 años, 7 meses
Puntos: 0
De acuerdo Re: xml a txt

en

https://www.linux-magazine.es/issue/11/Perl.pdf

hay un buen articulo.
Atte.
MG

__________________
Dios es mas grande que tu problema :-)
  #4 (permalink)  
Antiguo 11/07/2007, 16:07
 
Fecha de Ingreso: octubre-2004
Ubicación: Santiago de Chile
Mensajes: 504
Antigüedad: 19 años, 7 meses
Puntos: 0
Re: xml a txt

como instalo use XML::Simple en windows???


MG
__________________
Dios es mas grande que tu problema :-)
  #5 (permalink)  
Antiguo 12/07/2007, 06:26
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 3 meses
Puntos: 90
Re: xml a txt

entrá a inicio - ejecutar y ejecutá el CMD

te abre el DOS, ahí hace PPM

y dentro ya del PPM hacé

install XML::Simple

Saludos
__________________
Esteban Quintana
  #6 (permalink)  
Antiguo 12/07/2007, 11:56
 
Fecha de Ingreso: octubre-2004
Ubicación: Santiago de Chile
Mensajes: 504
Antigüedad: 19 años, 7 meses
Puntos: 0
De acuerdo Re: xml a txt

esto es lo que hice.

C:\Perl\bin>ppm
PPM - Programmer's Package Manager version 3.4.
Copyright (c) 2001 ActiveState Software Inc. All Rights Reserved.

Entering interactive shell. Using Term::ReadLine::Perl as readline library.

Type 'help' to get started.

ppm> install XML::Simple
Searching for 'XML::Simple' returned no results. Try a broader search first.


Gracias por tu respuesta.
__________________
Dios es mas grande que tu problema :-)
  #7 (permalink)  
Antiguo 12/07/2007, 12:22
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 3 meses
Puntos: 90
Re: xml a txt

perdoname, tenés que poner install XML-Simple

__________________
Esteban Quintana
  #8 (permalink)  
Antiguo 25/07/2007, 11:47
 
Fecha de Ingreso: octubre-2004
Ubicación: Santiago de Chile
Mensajes: 504
Antigüedad: 19 años, 7 meses
Puntos: 0
Desacuerdo Re: xml a txt

aun no puedo meter un xml en un archivo
solo llegue a la parte de mostrar la data.
Código PHP:
use XML::Simple;
use 
Data::Dumper;
$xml=new XML::Simple;
$data $xml -> XMLin("salida.xml");
print 
Dumper($data);
open(FILE">file.txt");
print 
FILE "$data[CodigoEstado];$data[1];$data[2];$data[3];$data[4]";
close(FILE);
chomp($mm=<STDIN>); 
el archivo devuleve ;;;;;
__________________
Dios es mas grande que tu problema :-)
  #9 (permalink)  
Antiguo 25/07/2007, 13:52
Avatar de monoswim
$moderador{'Esteban'}
 
Fecha de Ingreso: febrero-2002
Ubicación: Buenos Aires - Argentina
Mensajes: 8.762
Antigüedad: 22 años, 3 meses
Puntos: 90
Re: xml a txt

El XML::Simple tiene una función de XMLout que te graba la info en un archivo...

Seguramente estarás usando mal la referencia...El $ data es un array ? no es una referencia a un % ?

Saludos
__________________
Esteban Quintana
  #10 (permalink)  
Antiguo 25/07/2007, 14:36
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 524
Antigüedad: 18 años
Puntos: 11
Re: xml a txt

¿No puedes poner un ejemplo de cómo son los ficheros xml?
  #11 (permalink)  
Antiguo 25/07/2007, 15:03
 
Fecha de Ingreso: octubre-2004
Ubicación: Santiago de Chile
Mensajes: 504
Antigüedad: 19 años, 7 meses
Puntos: 0
Re: xml a txt

mira

Código PHP:
<?xml version="1.0" encoding="UTF-8"?>
<Salida>
    <Archivo>
        <CodigoEstado>6</CodigoEstado>
        <Nombre>ingreso_0302320001_20070518.xml</Nombre>
        <Concesionaria>3</Concesionaria>
        <Observaciones> [Firmado]</Observaciones>
        <FechaProceso>12/06/2007 03:01</FechaProceso>
    </Archivo>
</Salida>

me recomiendas un manual? (si fuese español mucho mejor.)

Muchas Gracias.
__________________
Dios es mas grande que tu problema :-)
  #12 (permalink)  
Antiguo 25/07/2007, 16:42
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 524
Antigüedad: 18 años
Puntos: 11
Re: xml a txt

Pero... ¿cada archivo xml contiene una única marca <Archivo> o puede contener más? Ya veo que <Salida> es la raíz, pero la duda es sobre <Archivo>. Según sea uno o más, dependerá la solución.
  #13 (permalink)  
Antiguo 26/07/2007, 12:23
 
Fecha de Ingreso: octubre-2004
Ubicación: Santiago de Chile
Mensajes: 504
Antigüedad: 19 años, 7 meses
Puntos: 0
De acuerdo Re: xml a txt

Cita:
Iniciado por jferrero Ver Mensaje
Pero... ¿cada archivo xml contiene una única marca <Archivo> o puede contener más? Ya veo que <Salida> es la raíz, pero la duda es sobre <Archivo>. Según sea uno o más, dependerá la solución.
podria tener mas tag <Archivo> y <Salida> es la raiz.


Te agradezco mucho tu respuesta.
Atte.
MG

__________________
Dios es mas grande que tu problema :-)
  #14 (permalink)  
Antiguo 26/07/2007, 15:08
Colaborador
 
Fecha de Ingreso: mayo-2006
Ubicación: Valladolid
Mensajes: 524
Antigüedad: 18 años
Puntos: 11
Re: xml a txt

Con el programa
Código:
#!/usr/bin/perl
use XML::Simple;
use strict;
use warnings;

my $xml = XMLin('kk.xml', ForceArray => [ 'Archivo' ]);

foreach my $archivo ( @{ $xml->{Archivo} } ) {

    print
        join q{;},
            $archivo->{CodigoEstado}    ,
            $archivo->{Nombre}          ,
            $archivo->{Concesionaria}   ,
            $archivo->{Observaciones}   ,
            $archivo->{FechaProceso}    ,
    ;

    print "\n";
}
y el fichero de entrada kk.xml:
Código:
<?xml version="1.0" encoding="UTF-8"?>
<Salida>
  <Archivo>
          <CodigoEstado>6</CodigoEstado>
          <Nombre>ingreso_0302320001_20070518.xml</Nombre>
          <Concesionaria>3</Concesionaria>
          <Observaciones> [Firmado]</Observaciones>
          <FechaProceso>12/06/2007 03:01</FechaProceso>
  </Archivo>
  <Archivo>
          <CodigoEstado>7</CodigoEstado>
          <Nombre>ingreso_0302320001_20070518.xml</Nombre>
          <Concesionaria>4</Concesionaria>
          <Observaciones> [Firmado]</Observaciones>
          <FechaProceso>13/06/2007 03:01</FechaProceso>
  </Archivo>
</Salida>
hace la salida:
Código:
6;ingreso_0302320001_20070518.xml;3; [Firmado];12/06/2007 03:01
7;ingreso_0302320001_20070518.xml;4; [Firmado];13/06/2007 03:01
El problema de XML::Simple es que es tan simple que hay que manejarse muy bien con las estructuras de datos en Perl. El uso del módulo Data::Dumper es casi imprescindible, en estos casos, para saber qué es lo que estamos leyendo.
Otra forma de hacer el programa:
Código:
#!/usr/bin/perl
use strict;
use warnings;

use XML::Simple;

my $xml = XMLin('kk.xml', ForceArray => [ 'Archivo' ]);

my $numero_de_archivos = @{ $xml->{Archivo} };

for ( my $i = 0; $i < $numero_de_archivos; $i++ ) {

    print
        join q{;},
            $xml->{Archivo}->[$i]->{CodigoEstado}    ,
            $xml->{Archivo}->[$i]->{Nombre}          ,
            $xml->{Archivo}->[$i]->{Concesionaria}   ,
            $xml->{Archivo}->[$i]->{Observaciones}   ,
            $xml->{Archivo}->[$i]->{FechaProceso}    ,
    ;

    print "\n";
}
Otra forma, más oscura, de hacer el print principal más corto, es usando un "hash slice":
Código:
print
    join ";",
        @{$xml->{Archivo}->[$i]}
            {qw(CodigoEstado Nombre Concesionaria Observaciones FechaProceso)};

Última edición por jferrero; 26/07/2007 a las 15:19
  #15 (permalink)  
Antiguo 30/07/2007, 12:26
 
Fecha de Ingreso: octubre-2004
Ubicación: Santiago de Chile
Mensajes: 504
Antigüedad: 19 años, 7 meses
Puntos: 0
De acuerdo Re: xml a txt

Solo les escribo para darles las gracias!
por fin gracias a tu ejemplo me resulto.
Muy agradecido.
MG

__________________
Dios es mas grande que tu problema :-)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:54.