por explorer » 2012-09-16 11:04 @503
Si sale el mensaje de error es porque, en efecto, dentro de TEST2 solo hay un elemento, y por lo tanto XML::Simple no ha creado una referencia a un array, si no que contiene una referencia una clave que apunta al siguiente hash más profundo.
Mira la estructura que volcó Dumper en mi anterior ejemplo, y lo verás.
Aquí hay que decir dos cosas.
La primera: que en mi último ejemplo eso está resuelto porque accedo al único elemento que hay dentro de TEST2, que es un TEST3 (línea 42).
Y la segunda: XML::Simple tiene la desagradable característica de crear diferentes estructuras de datos según exista un solo elemento o una lista de elementos, dentro de un elemento determinado (por eso se llama Simple).
Eso quiere decir que si dentro de TEST2, en algunas ocasiones hay un solo elemento, lo devolverá en forma de referencia a un hash, pero si en otra ocasión hay más de un elemento, entonces creará una referencia a un array.
Debes, antes de nada, decidir o saber cuál es la estructura XML que quieres manejar. Saber qué elementos pueden aparecen una sola vez, o varias.
Según eso, en la llamada XML::Simple->new() pondremos una o más opciones que indiquen cómo deben ser tratados esos elementos. En casi todos los casos, nos interesará obtener un array de ese elemento, aunque a veces solo contenga un elemento. Pero eso nos simplifica el código.
Pues eso: nos tienes que decir el esquema correcto del XML que quieres procesar.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES