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

PerlXML

Avatar of undefined
Last Comment
michaelshavel

8/22/2022 - Mon
ASKER CERTIFIED SOLUTION
clockwatcher

Log in or sign up to see answer
Become an EE member today7-DAY FREE TRIAL
Members can start a 7-Day Free trial then enjoy unlimited access to the platform
Sign up - Free for 7 days
or
Learn why we charge membership fees
We get it - no one likes a content blocker. Take one extra minute and find out why we block content.
See how we're fighting big data
Not exactly the question you had in mind?
Sign up for an EE membership and get your own personalized solution. With an EE membership, you can ask unlimited troubleshooting, research, or opinion questions.
ask a question
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.
ASKER
michaelshavel

Thanks. Just what I needed.
All of life is about relationships, and EE has made a viirtual community a real community. It lifts everyone's boat
William Peck