michaelshavel
asked on
Using Perl and XML::Simple to parse XML file
Hi,
I am trying to parse and XML file from weather.com. The file they send is pretty complicated so I wanted to first try a simpler file -- I tried the example given in the docs for XML::Simple. I can't get the example to print out individual element data
I've included the perl code and the XML file.
If I print the "Dumper ($config)" out I get the data.
If I try and print an individual element out though with either of the lines below, I just get a "use of uninitialized value" message. I've tried every combination I can think of to print out individual element data out but I just can't get the sytax correct. Thanks for your help and suggestions.
print $config->{logdir};
print $config->{server}->{kalaha ri}->{addr ess}->[1];
Possibly XML::Simple isn't what I need. Any other ideas?
I am trying to parse and XML file from weather.com. The file they send is pretty complicated so I wanted to first try a simpler file -- I tried the example given in the docs for XML::Simple. I can't get the example to print out individual element data
I've included the perl code and the XML file.
If I print the "Dumper ($config)" out I get the data.
If I try and print an individual element out though with either of the lines below, I just get a "use of uninitialized value" message. I've tried every combination I can think of to print out individual element data out but I just can't get the sytax correct. Thanks for your help and suggestions.
print $config->{logdir};
print $config->{server}->{kalaha
Possibly XML::Simple isn't what I need. Any other ideas?
#!/usr/bin/perl -w
#Used to get weather data from weather.com
use LWP::Simple;
use XML::Simple qw(:strict);
use Data::Dumper;
#$url="http://xoap.weather.com/weather/local/02314?cc=*&dayf=5&link=xoap&prod=xoap&par=1065087128&key=f881060f95a12e6b";
$url="test.xml";
my $weatherdata = get($url);
my $xs = XML::Simple->new(ForceArray => 1, KeepRoot => 1, KeyAttr=>[]);
my $config = $xs->XMLin($weatherdata);
#print Dumper($config); #Printing this out works fine.
print $config->{logdir};
print $config->{server}->{kalahari}->{address}->[1];
-------
<config logdir="/var/log/foo/" debugfile="/tmp/foo.debug">
<server name="sahara" osname="solaris" osversion="2.6">
<address>10.0.0.101</address>
<address>10.0.1.101</address>
</server>
<server name="gobi" osname="irix" osversion="6.5">
<address>10.0.0.102</address>
</server>
<server name="kalahari" osname="linux" osversion="2.0.34">
<address>10.0.0.103</address>
<address>10.0.1.103</address>
</server>
</config>
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Thanks. Just what I needed.
The '[ ]' blocks indicate references to arrays. The '{ }' indicate references to hashes. A '( )' would indicate an array and the '=>' indicates a hash.