Sab Oct 21, 2006 10:56 am
|
 |
g013m
Perlero Nuevo

|
Registrado: 15 Jul 2005
Mensajes: 15
|
|
| Crear Archivo XML |
|
|
Saludos, estoy tratando de crear una archivo XML con el módulo XML::Simple que tenga más o menos la siguiente estructura:
| HTML: | <ajaxresponse>
<item>
<apellido>xxx</apellido>
<nombre>zzz</nombre>
<numero>1</numero>
</item>
<item>
<apellido>xxx</apellido>
<nombre>zzz</nombre>
<numero>2</numero>
</item>
<item>
<apellido>xxx</apellido>
<nombre>zzz</nombre>
<numero>3</numero>
</item>
</ajaxresponse>
|
Esto lo puedo obtener haciendo esto:
| Perl: | my $lista = {
'item' => [
{
'numero' => '1',
'nombre' => 'zzz',
'apellido' => 'xxx'
},
{
'numero' => '2',
'nombre' => 'zzz',
'apellido' => 'xxx'
},
{
'numero' => '3',
'nombre' => 'zzz',
'apellido' => 'xxx'
}
]
};
my $xml = XMLout($lista,RootName=> "ajaxresponse",NoAttr => 1); |
En $xml tengo todo el XML generado. Ahora, quiero hacer esto mismo pero no escribiendo el array dinámicamente con datos que obtengo de una consulta SQL, estoy haciendo algo parecido a esto (pero con datos reales):
| Perl: |
my @numeros = ('1'.. '3');
my @otroxml;
foreach(@numeros) {
push @otroxml, {
'item' => [{
numero => $_,
nombre => 'zzz',
apellido => 'xxx'
}]
}
}
my $xml2 = XMLout (\ @otroxml,RootName=> "ajaxresponse",NoAttr => 1, ); |
Si imprimo $xml2, obtengo esto:
| HTML: | <ajaxresponse>
<anon>
<item>
<apellido>xxx</apellido>
<nombre>zzz</nombre>
<numero>1</numero>
</item>
</anon>
<anon>
<item>
<apellido>xxx</apellido>
<nombre>zzz</nombre>
<numero>2</numero>
</item>
</anon>
<anon>
<item>
<apellido>xxx</apellido>
<nombre>zzz</nombre>
<numero>3</numero>
</item>
</anon>
</ajaxresponse> |
La cosa es que estan apareciendo esos tags: <anon></anon>, el problema es, según estuve revisando, en la forma como se crea el array, por que si hago un "Dump" de la estructura de los arrays, obtengo esto:
para $lista:
| Perl: | $VAR1 = {
'item' => [
{
'numero' => '1',
'apellido' => 'xxx',
'nombre' => 'zzz'
},
{
'numero' => '2',
'apellido' => 'xxx',
'nombre' => 'zzz'
},
{
'numero' => '3',
'apellido' => 'xxx',
'nombre' => 'zzz'
}
]
} | ;
y para @otroxml:
| Perl: | $VAR1 = {
'item' => [
{
'numero' => 1,
'apellido' => 'xxx',
'nombre' => 'zzz'
}
]
};
$VAR2 = {
'item' => [
{
'numero' => 2,
'apellido' => 'xxx',
'nombre' => 'zzz'
}
]
};
$VAR3 = {
'item' => [
{
'numero' => 3,
'apellido' => 'xxx',
'nombre' => 'zzz'
}
]
}; |
entonces en vez de obtener una sola $VAR obtengo 3, como podría hacer para que el array que necesito quede de la estructura correcta, o como hago para que el módulo XML::Simple pueda formatearlo de la forma correcta, creo que el problema es como estoy construyendo el array, si alguno puede darme una luz, se lo agradecería  |
|
|
|

Sab Oct 21, 2006 11:59 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4226
Ubicación: Valladolid, España
|
|
|
|
|
Si, el problema es a la hora de construir la estructura de datos.
Fíjate que primero hablas de $lista (un escalar), pero luego hablas de un array (@otroxml).
En la asignación que haces con push, estas introduciendo efectivamente en elemento de un array, y por eso el Dump te sale cada elemento como una variable distinta.
Se podría crear el xml de la misma manera que tienes definido en $lista: como un escalar que referencia al resto de la estructura:
| Perl: | my @numeros = ( 1.. 3 );
my $otroxml;
foreach ( @numeros ) {
push @ {$otroxml-> {item }}, {
numero => $_,
nombre => 'zzz',
apellido => 'xxx'
}
}
my $xml2 = XMLout ($otroxml,RootName=> "ajaxresponse",NoAttr => 1, ); |
Estos son los pasos:
* Creamos la variable $otroxml
* Dentro del bucle, $otroxml->{item} nos 'crea' la misma estructura base de $lista: dentro de $lista sólo hay un hash anónimo que tiene sólo una pareja clave/valor, la de 'item' y todo lo demás.
* Sabemos que el valor almacenado en la clave 'item' es una referencia a un array (o, mejor dicho, en un array anónimo). Poniendo @{$otroxml->{item}} Pel ya sabe que dentro de 'item' hay un array, por lo que ya puede actuar el push.
* Y lo que recibe push es un hash anónimo con nuestros 3 valores. |
|

Sab Oct 21, 2006 3:41 pm
|
 |
g013m
Perlero Nuevo

|
Registrado: 15 Jul 2005
Mensajes: 15
|
|
|
|
|
Buenisimo, ya funciona bien, muchas gracias.
Saludos. |
|
Powered by phpBB © 2001, 2005 phpBB Group
|