in reply to XML::Simple and Adding Additional Nested Elements
in thread XML::Simple and Adding Nested Elements

Obviously you can do this:

push @{ $data->{Things}->{Thing} }, { 'Item' => $var1, 'Number' => $var2, 'Details' => { 'Detail' => { 'Color' => $var3 } }, 'AdditionalInfo' => { 'Info' => $var4, 'Stuff' => $var5, 'MoreDetails' => { 'ExtraColor' => $var6 } } };

But probably it is not what you really want. If the real question is "How can I dinamically build the structure that will generate my XML?", the answer is not so simple (aka, I can't make it for you :)):

The right path to enlightment is to understand how complex data structures work in perl (your example id a HoHoHoHoH, not the very simplest) so you can handle them in a better way

As an example, the following code probably do what you expect:

$struc={ 'Item' => $var1, 'Number' => $var2, 'Details' => { 'Detail' => { 'Color' => $var3 } } } $struc->{AdditionalInfo}={ 'Info' => $var4, 'Stuff' => $var5, 'MoreDetails' => { 'ExtraColor' => $var6 } }; push @{ $data->{Things}->{Thing} },$struc;

Not sure, I can't try it now

Rule One: Do not act incautiously when confronting a little bald wrinkly smiling man.

Replies are listed 'Best First'.
Re^2: XML::Simple and Adding Additional Nested Elements
by Ozeroc (Novice) on May 23, 2008 at 09:02 UTC
    Thank you. That's a good idea. One last question. How would I find a specific Item? I was thinking along these lines:
    if ($data{Things}{Thing}{Item} = "aValue") { ...

      That code will not work because your structure is an array of reference.;/p>

      You can do if ($data[0]->{Things}->{Thing}->{Item} == "aValue")

      I strongly suggest you see Data Structures in the Q&A section of the monastery.

      Rule One: Do not act incautiously when confronting a little bald wrinkly smiling man.

      if ($data{Things}{Thing}{Item} = "aValue") {

      That would most likely not do what you want as it assigns "aValue" to the respective hash entry... :) — remember: eq is for string comparison.

        :(

        I saw the "=" and corrected it as "=="... Who can I ask for having 10 XP removed for this? :)

        Rule One: Do not act incautiously when confronting a little bald wrinkly smiling man.