Link to home
Start Free TrialLog in
Avatar of michaelshavel
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}->{kalahari}->{address}->[1];

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>

Open in new window

ASKER CERTIFIED SOLUTION
Avatar of clockwatcher
clockwatcher

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of clockwatcher
clockwatcher

Regarding the dumper output, I should have said:

The '[ ]' blocks indicate references to arrays.  The '{ }' indicate references to hashes.  A '( )' would indicate an array and the '=>' indicates a hash.
Avatar of michaelshavel

ASKER

Thanks. Just what I needed.