• Publicidad

Modificar un xml mediante Perl

Aquí encontrarás todo lo que sea específicamente acerca de módulos de Perl. Ya sea que estás compartiendo tu módulo, un manual o simplemente tienes una duda acerca de alguno.

Modificar un xml mediante Perl

Notapor infojose » 2007-01-08 07:21 @348

Me gustaría saber como puedo añadir nuevos datos a un archivo existente xml sin tener que crearme uno nuevo.
gracias
infojose
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2007-01-08 07:18 @346

Publicidad

Notapor explorer » 2007-01-08 08:09 @381

Bienvenido a los foros de Perl en Español.

Para añadir nuevos datos a un xml, lo normal es parsear el actual xml, añadir los datos y grabar el nuevo xml.

Creo que algún motor de base de datos ya lo puede hacer en un sólo paso, pero, internamente, hace eso.

En este foro encontrarás varias soluciones para XML. Usa el sistema de búsqueda y verás que se suele usar el módulo XML::Simple, aunque sería más recomendable usar el XML::Twig o el XML::Smart. En CPAN hay muchos más módulos para tratar XML. Casi más difícil que manejar xml es decidirse por qué módulo usar.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor explorer » 2007-01-08 09:29 @437

Aquí hay un ejemplo con XML::Simple. El problema con este módulo es que, al ser tan simple, nos obliga a conocer bien cómo se organizan las estructuras de datos en Perl:
Sea el fichero kk.xml:
Sintáxis: [ Descargar ] [ Ocultar ]
Using xml Syntax Highlighting
<?xml version='1.0' standalone='yes'?>
<articulos>
  <articulo>
    <editorial>Edelvives</editorial>
    <nombre>Juan Ramón</nombre>
    <year>1963</year>
  </articulo>
</articulos>
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
Con este programa:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl

use XML::Simple;

# Lo leemos
my $xml = XMLin("kk.xml",ForceArray => ['articulo']);

# Lo modificamos, agregando un nuevo artículo
push @{ $xml->{articulo} }, {
    nombre      => 'Agustin de Valdehorras',
    editorial   => 'Santillana',
    year        => '1977',
};

# Salida a pantalla (podría ser también un fichero)
print XMLout($xml,RootName=>'articulos',NoAttr=>1,XMLDecl => 1);
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4
lo convertimos a:
Sintáxis: [ Descargar ] [ Ocultar ]
Using xml Syntax Highlighting
<?xml version='1.0' standalone='yes'?>
<articulos>
  <articulo>
    <editorial>Edelvives</editorial>
    <nombre>Juan Ramón</nombre>
    <year>1963</year>
  </articulo>
  <articulo>
    <editorial>Santillana</editorial>
    <nombre>Agustin de Valdehorras</nombre>
    <year>1977</year>
  </articulo>
</articulos>
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Modificar un xml mediante Perl

Notapor Perl user » 2007-01-08 18:20 @805

infojose escribiste:Me gustaría saber como puedo añadir nuevos datos a un archivo existente xml sin tener que crearme uno nuevo.
gracias


Si realmente lo que quieres es tener control completo de cómo generas un documento XML bien formado échale un vistazo a XML::LibXML. Claro está, dando por hecho que tienes conocimiento sobre DOM (cualquier nivel).

Saludos,
Marco A. Manzo
[email protected]
http://www.unixmonkeys.com/amnesiac/
Perl Programming Language
Perl user
Maestro honorario
Maestro honorario
 
Mensajes: 271
Registrado: 2004-11-03 21:11 @924

Notapor infojose » 2007-01-09 04:43 @238

ok! muchas gracias, lo unico es que a mi me gustaria saber si puedo añadir directamente los nuevos datos al fichero kk.xml(ejemplo anterior) sin tener que crearme uno nuevo, y en caso de que no pueda como puedo tratar el tema de las lineas que son cabeceras para qu no se m e cierren al final del archivo.
infojose
Perlero nuevo
Perlero nuevo
 
Mensajes: 4
Registrado: 2007-01-08 07:18 @346

Notapor explorer » 2007-01-09 05:13 @259

Yo no conozco ningún módulo (quizás exista) que permita actualizar un xml sin tener que cargarlo en memoria.

Algunos, como el XML::Twig permite procesar ficheros xml grandes procesándolos en bloques, pero si se trata de modificarles, la solución creo que siempre es la misma: crear un nuevo fichero. Que luego ese fichero sobreescriba al original es cuestión de una línea más en Perl.

Y para tratarlo línea a línea, como dices al final, no entiendo eso de que no se cierren al final del archivo. Si no se cierran las etiquetas entonces será un xml mal formado y en algunos sistemas te dará error.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor explorer » 2007-01-16 13:51 @618

Bueno... hay una forma... Perl es capaz de procesar ficheros de texto de forma interactiva. Es decir, procesar el fichero línea a línea, modificarla o no, y el resultado queda en el mismo fichero.

Es lo que se puede hacer con la combinación del 'pie': perl -p -i -e 'script' fichero.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Tutorial LibXML

Notapor xagutxu_perez » 2008-06-20 05:39 @277

¿Sabe alguien dónde puedo encontrar un tutorial de LibXML?

Gracias,

Xagutxu
xagutxu_perez
Perlero nuevo
Perlero nuevo
 
Mensajes: 43
Registrado: 2008-04-04 03:56 @206

Notapor danimera » 2008-06-24 11:09 @506

¡Huy!, ya que estoy trabajando algo similar... ¿Me puedes decir, explorer, con ese ejemplo que tienes ahí, cómo podría modificar un dato de los que tengo? Es que hasta ahora lo que hago es modificar mi BD y después generar el XML.
100% Telch - Perl Web Programming
Cali PerlMongers: http://cali.pm.org
Avatar de Usuario
danimera
Perlero frecuente
Perlero frecuente
 
Mensajes: 871
Registrado: 2005-06-23 19:02 @834
Ubicación: Colombia

Notapor explorer » 2008-06-24 11:42 @529

Eso depende de la estructura que tenga el XML... Habrá que verla con el Data::Dumper;
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Siguiente

Volver a Módulos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados