XML::Simple processing



examples/xml/xml_simple_extract.pl
#!/usr/bin/perl
use strict;
use warnings;

use XML::Simple qw(XMLin XMLout);
use Data::Dumper;
my $xml = XMLin('examples/data.xml',
        ForceArray => 0, 
        KeyAttr => [],
);

print "List all currencies\n";

# KeyAttr is the default
#foreach my $country_name (keys %{ $xml->{country} }) {
#    printf "%-10s %s\n", 
#        $country_name, $xml->{country}->{$country_name}->{currency};
#}

# KeyAttr => [],
foreach my $country (@{ $xml->{country} }) {
    printf "%-10s %s\n", $country->{name}, $country->{currency}
}

#printf "The currency of the USA is %s.\n", $xml->{country}->{USA}->{currency};
foreach my $country (@{ $xml->{country} }) {
    if ($country->{name} eq 'USA') {
        printf "The currency of the USA is %s.\n", $country->{currency};
        last;
    }
}


#foreach my $country_name (keys %{ $xml->{country} }) {
#    if ($xml->{country}->{$country_name}->{id} == 2) {
#        printf "The currency of country id 2 is %s.\n", 
#            $xml->{country}->{$country_name}->{currency};
#        last;
#    }
#}

foreach my $country (@{ $xml->{country} }) {
    if ($country->{id} == 2) {
        printf "The currency of country id 2 is %s.\n", 
            $country->{currency};
        last;
    }
}


#$xml->{country}->{Hungary}->{currency} = 'Euro';
foreach my $country (@{ $xml->{country} }) {
    if ($country->{name} eq 'Hungary') {
        $country->{currency} = 'Euro';
        last;
    }
}

XMLout($xml, 
        OutputFile => 'out.xml', 
        RootName   => 'data',
        KeyAttr    => [],
        NoAttr     => 1,
);
        #KeyAttr    => ['id'],
        #NoAttr     => 0,