You just want to print the elements of an array. It takes a little digging to get to the array, but you've already done most of that. The only missing bit is casting the array reference to an array. The magic is @{$machine->{file}{filename}}. Here's the result:
use strict; use warnings; use XML::Simple; my $str = <<XML; <config> <server> <name>server1</name> <file> <filename>/etc/named.conf</filename> <filename>/etc/nsswitch.conf</filename> </file> </server> <server> <name>server2</name> <file> <filename>/etc/named.conf</filename> <filename>/etc/nsswitch.conf</filename> <filename>/etc/hosts</filename> </file> </server> </config> XML my $xml = new XML::Simple (KeyAttr=>[]); my $data = $xml->XMLin ($str); foreach my $machine (@{$data->{server}}) { my $name = $machine->{name}; print "$name\n"; print "\t@{$machine->{file}{filename}}\n"; }
Prints:
server1 /etc/named.conf /etc/nsswitch.conf server2 /etc/named.conf /etc/nsswitch.conf /etc/hosts
In reply to Re: XML understanding
by GrandFather
in thread XML understanding
by svankalken
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |