• Publicidad

Problemas al crear un .XML

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

Problemas al crear un .XML

Notapor SombraUO » 2007-11-14 14:54 @662

Hola, escribo en esta oportunidad debido a que tengo dificultades al escribir en el archivo .xml que genero, estas son las lineas de código que he logrado:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!C:/Perl/bin/PERL58~1.EXE -w
use XML::Simple;

   $programa="Test1.MiX";
 
   my $xs = new XML::Simple();
   open my $XML, '>:encoding(iso-8859-1)', 'archivo5.xml' or die "No se pudo abrir archivo: $!";
   print {$XML}
   my $ref = $xs->XMLin("<p> <programa> $programa </programa></p>");
   my $xml = $xs->XMLout($ref);
   print $xml;
   exit;
   close $XML;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


pero lo que necesito que contenga el archivo .xml es lo siguiente:

Código: Seleccionar todo
<programa> $programa</programa>
      <lineas> $lineas </lineas>
   <variables> $variables </variables>
 <operadores> $operadores</operadores>


pero esto no lo consigo, debido a que no logro escribir más de una línea en el xml; aparte, éste, al abrirlo me da un error:

Código: Seleccionar todo
XML document must have a top level element. Error processing resource....


Es mi primera vez que trabajo con .xml y Perl.

¡Cualquier ayuda es bien recibida!
SombraUO
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2007-11-11 16:13 @717

Publicidad

Notapor explorer » 2007-11-14 16:23 @724

Hay que comentar varias cosas, viendo el código:
  • Inicializas $programa al valor de lo que supongo que es el nombre del fichero XML de entrada
  • Luego abres un fichero de salida, 'archivo5.xml', sorprendentemente con codificación iso-8859-15 (cuando el estándar de los XML es el utf-8)
  • Luego haces un print, pero no dices de qué...
  • Luego están dos líneas del XML::Simple...
  • En la primera, ordenas que $ref almacene la estructura del XML que le estás pasando directamente como argumento
  • Y en la siguiente, vuelcas el XML a la variable $xml
  • Finalmente, un lío entre close y exit...

A ver... controlar XML::Simple es una auténtica pesadez, porque necesitas controlar mucho de estructuras complejas de datos en Perl, así que para un novato, esto es algo realmente diabólico. Un consejo: Data::Dumper es tu amigo.

Para conseguir la salida que tu quieres NI siquiera te hace falta el módulo XML::Simple... Solo tienes que pintar el contenido del xml, y punto.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
my $fichero_mix = 'Test1.MiX';
my $lineas      = 10;
my $variables   = 'A B D';
my $operadores  = '* / -';

# Creamos el xml
my $xml = << "END_OF_XML";
<?xml version="1.0" encoding="ISO-8859-1"?>
<p>
    <programa> $fichero_mix </programa>
    <lineas> $lineas </lineas>
    <variables> $variables </variables>
    <operadores> $operadores </operadores>
</p>
END_OF_XML

# Grabación
my $fh;
open  $fh, q{>:encoding(iso-8859-1)}, 'archivo5.xml';
print $fh $xml;
close $fh;

# Fin, pero vamos a comprobarlo de verdad
print "$xml\n";     # Versión texto

use XML::Simple;
use Data::Dumper;

$xml = XMLin('archivo5.xml');
print Dumper $xml;  # Versión estructura de datos Perl
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

Salida:
Código: Seleccionar todo
<?xml version="1.0" encoding="ISO-8859-1"?>
<p>
    <programa> Test1.MiX </programa>
    <lineas> 10 </lineas>
    <variables> A B D </variables>
    <operadores> * / - </operadores>
</p>

$VAR1 = {
          'variables' => ' A B D ',
          'programa' => ' Test1.MiX ',
          'operadores' => ' * / - ',
          'lineas' => ' 10 '
        };
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re:

Notapor SombraUO » 2007-11-14 17:19 @763

¡Muchas Gracias por la pronta respuesta!... :D !

Honestamente ya no sabía ni lo que hacía... ¡solo me concentraba en que saltara la línea! :P y estaba a punto de perder la cabeza :lol:.

¿Te importaría explicarme un poco como es que trabaja el Dumper en el código?
SombraUO
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2007-11-11 16:13 @717

Notapor explorer » 2007-11-14 17:38 @776

Dumper es una función importada desde el módulo Data::Dumper.

Se encarga de sacarnos el contenido de una variable, mostrando visualmente cómo es por dentro. Como ves en el ejemplo, nos ha sacado un hash, pero podría ser mucho (pero que mucho) más complicado. De hecho, la salida de Dumper se podría meter directamente en un programa, para inicializar una variable con esos contenidos.

En este foro encontrarás abundantes ejemplos con salidas hechas con Data::Dumper.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

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