• Publicidad

Dudas con parsear un fichero XML

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Dudas con parsear un fichero XML

Notapor fgalves » 2006-12-20 02:36 @150

Hola a todos,

El caso es que tengo que implementar un script que recupere un fichero XML, lo abra, lo parsee, y según el valor de un atributo, lo meta en un directorio o en otro.

¿Alguien me puede dar un link con todas las funciones y ejemplos que me puedan ser útiles para el parseo de ficheros XML?

He intentado usar el modulo XML::Smart, pero no esta instalado, y no se trata de un sistema en el que yo pueda instalar módulos cuando me convenga. Tengo que usar los que están disponibles.

Muchas gracias!
Felipe
fgalves
Perlero nuevo
Perlero nuevo
 
Mensajes: 210
Registrado: 2006-09-25 13:54 @621

Publicidad

Notapor explorer » 2006-12-20 06:52 @328

Pues si no puedes instalar nada, casi mejor que nos digas qué módulos de la rama XML:: tienes instalados.

Si el problema que tienes que resolver es simple, quizás con XML::Simple lo resuelvas en un par de líneas.

En este foro hay algunas respuestas a problemas parecidos. Usa el sistema de búsqueda.

Por ejemplo: viewtopic.php?t=1369&highlight=xml+simple
Última edición por explorer el 2006-12-20 21:20 @930, editado 1 vez en total
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 monoswim » 2006-12-20 06:54 @329

¿ Los que estén disponibles ? ¿ y esos cuales son ? Deberías de preguntar qué sistema operativo usan y qué módulos tienen instalados. Todo administrador de server lo sabe...

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

Ese módulo es bastante fácil de usar para XMLs, al ser básico tal vez venga ya instalado, no lo sé... Igual son fáciles de instalar los módulos. ¿ Por qué no se puede instalarlos en tu caso ?

Saludos
MonoSwim
Perl Programming Language
Avatar de Usuario
monoswim
Perlero nuevo
Perlero nuevo
 
Mensajes: 452
Registrado: 2003-11-18 16:13 @717
Ubicación: Buenos Aires

Notapor fgalves » 2006-12-20 07:31 @355

Hola a los dos y gracias por el interés que habéis mostrado,

Os explico exactamente cual es mi propósito:

Código: Seleccionar todo
<?xml version="1.0" ?>

<!-- the main node -->
<REQUEST>

<!--the FORCED flag - The two possible values:
“Y”: the report must be immediately generated
“N”: the report is generated during the night-->   
<FORCED flag=”N” />                                                                 

<!--the SELECTION node: it contains the set of selected fields -->   
<SELECTION>   


Os muestro la siguiente parte del fichero XML que debo tratar ya que contiene la parte que me interesa. De hecho, lo que debo hacer es recuperar el valor del campo flag del nodo FORCED. Si dicho flag = "N", tengo que copiar dicho fichero XML en un directorio, y si dicho flag = "Y", debo copiarlo en otro.
Supongo que debe ser muy simple de implementar, pero para mi que soy novato, es la primera vez que trabajo con ficheros XML en Perl.

Muchas gracias por cualquier aportación,
Saludos,
Felipe
fgalves
Perlero nuevo
Perlero nuevo
 
Mensajes: 210
Registrado: 2006-09-25 13:54 @621

Notapor explorer » 2006-12-20 08:21 @390

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl

use XML::Simple;

my $ref = XMLin('kk.xml');

if ( $ref->{FORCED}->{flag} eq 'Y' ) {
  # ...
}
else {
  # ...
}
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Si no tienes instalado el XML::Simple, tendrás que leer el fichero línea por línea hasta encontrar el atributo, y luego, con una expresión regular, sacar su valor.
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 fgalves » 2006-12-20 12:07 @546

Muchas gracias Explorer,

Aparentemente sí está instalado pues no se queja al ejecutar el script. Por contra, tengo un pequeño problema con el cual espero que podáis ayudarme:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#read the FORCED flag and place into the right directory
            print "FILENAME: $filename"."\n";
            if (! -f $filename) {
                die "\n$0: ERROR: Cannot open XML file for analysis";
            }
            else {
                my $ref = XMLin('$filename');
               
                if ( $ref->{FORCED}->{flag} eq 'Y' ) {
                    `mv $filename $TargetDirForced/.`;
                }
                else {
                    `mv $filename $TargetDirNoForced/.`;
                }
               
            }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4



El caso es que ejecuto el script en cuestión y siempre se queja en la línea en que hago el XMLin.

Código: Seleccionar todo
FILENAME: felipe.xml
File does not exist: $filename at FqStatsMQRRetrieving.pl line 248


Como se puede ver, el fichero existe, pero para XMLin, aparece como inexistente.
¿Alguien ve en qué me estoy equivocando?

¡¡Muchas gracias!!
Felipe
fgalves
Perlero nuevo
Perlero nuevo
 
Mensajes: 210
Registrado: 2006-09-25 13:54 @621

Notapor explorer » 2006-12-20 13:32 @605

Pues que te sobran las comillas simples.

Le estás diciendo que busque el fichero $filename, y no el fichero cuyo nombre está contenido en $filename.

Otra cosa. Yo prefiero usar File::Copy o Sysadm::Install para las operaciones de copiar y mover ficheros. Eso de llamar con las comillas invertidas me da mucho repelús.
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 fgalves » 2006-12-28 10:55 @497

Muchisimas gracias Explorer!!
Funciona perfecto con XML::Simple.

En cuanto a lo de las comillas invertidas, porque te dan repelus?
Hay algun problema potencial al usar comandos de copiar, mover o borrar directamente con dichas comillas?

Gracias por toda la informacion y por la ayuda!!
Saludos,
Felipe
fgalves
Perlero nuevo
Perlero nuevo
 
Mensajes: 210
Registrado: 2006-09-25 13:54 @621


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado