Hi, Thanks you for your valuable comments,let me try the Twig module.
On 12/8/15, Kent Fredric <kentfred...@gmail.com> wrote: > On 8 December 2015 at 19:25, perl kamal <kamal.p...@gmail.com> wrote: >> I am trying to parse the inner loop elements of the attached input xml >> elements. >> The below code doesn't retrieve the inner loop(<property>) elements if >> the properties tag contains more than one item. Will you please point >> the error and correct me. >> Please find the attached input xml file. Thanks. > > A quick glance suggests you're getting bitten by one of the known > problems of XML::Simple: That its completely inconsistent. > > 2 seemingly identally strucutred XML files can be decoded completely > different to each other, so you need to have special cases everywhere > in your code *just in case* that happens. > > Take for instance this simple code and its simple XML > > use strict; > use warnings; > use utf8; > > my $sample_a = <<"EOF"; > <group> > <subgroup> > <item name="bruce" /> > </subgroup> > </group> > EOF > > my $sample_b = <<"EOF"; > <group> > <subgroup> > <item name="mary" /> > <item name="sue" /> > </subgroup> > </group> > EOF > > use XML::Simple; > use Data::Dump qw(pp); > my $sample_a_dec = XMLin($sample_a); > my $sample_b_dec = XMLin($sample_b); > > pp { > a => $sample_a_dec, > b => $sample_b_dec, > }; > > It looks simple, it looks like a and be have similar enough data > structures, and you expect the pretty printed output to also be > similar, right? Right? > > Nope! > > Here, XML::Simple went a bit special snowflake. > > { > a => { subgroup => { item => { name => "bruce" } } }, > b => { subgroup => { item => { mary => {}, sue => {} } } }, > } > > At first glance you might overlook how these 2 entries are completely > different. > > One is a hash mapping: > "somevalue" => hash > The other is a has mapping: > "name" => some value > > either it should be: > > a => { subgroup => { item => { bruce => {} } } }, > b => { subgroup => { item => { mary => {}, sue => {} } } }, > > or it should be > > a => { subgroup => { item => [{ name => "bruce" }] }}, > b => { subgroup => { item => [{ name => "mary" }, { name => "sue" }] } } > > > But XML::Simple gave you the worst of both worlds. > > For this reason, XML::Simple is not recommended for real world work. > XML::Twig may be more what you're looking for. > > Even its maintainer and author for 15 says "Hey, please don't use this" :) > > -- > Kent > > KENTNL - https://metacpan.org/author/KENTNL > -- To unsubscribe, e-mail: beginners-unsubscr...@perl.org For additional commands, e-mail: beginners-h...@perl.org http://learn.perl.org/