in reply to Perl XML parsing with XML::Simple - Having problem with accessing fields

vparikh:

It works just fine for me. Perhaps you're doing someting to disturb your hash before you try to print it?

$ cat t.pl #!/usr/bin/perl use strict; use warnings; my $VAR1; $VAR1 = { 'Data1' => { 'Data2' => { 'DATE' => '2000-10-19', 'ID' => 'A95', 'STATUS' => 'A', 'TIME' => {}, }, 'TIMESTAMP' => '2012-08-04T20:15:04.506-04:00' } }; print $VAR1->{Data1}{Data2}{DATE}, ".\n"; print $VAR1->{Data1}->{Data2}->{DATE}, ".\n"; $ perl t.pl 2000-10-19. 2000-10-19.

...roboticus

When your only tool is a hammer, all problems look like your thumb.

  • Comment on Re: Perl XML parsing with XML::Simple - Having problem with accessing fields
  • Download Code

Replies are listed 'Best First'.
Re^2: Perl XML parsing with XML::Simple - Having problem with accessing fields
by vparikh (Novice) on Aug 17, 2012 at 17:25 UTC
    Thank you for your quick reply. But I am not able to access $var1 as a variable since it is not really in my script. My original script is this:
    use XML::Simple; # qw(:strict); use Data::Dumper; my $simple = XML::Simple->new(); my $config = $simple->XMLin('/home/parse3.xml'); print $config; print $config->{Data1}->{Data2}->{DATE}, ".\n";
    Before I was using Data dumper, so it would dump it all out as $VAR1. So my question is how do I access the date field with or without data dumper? Thanks again. I really appreciate your help!

      Since you didn't provide your actual XML, I had to dummy some up based on the dump you provided.

      <root> <Data1> <TIMESTAMP>2012-08-04T20:15:04.506-04:00</TIMESTAMP> <Data2> <DATE>2000-10-19</DATE> <ID>A95</ID> <STATUS>A</STATUS> <TIME></TIME> </Data2> </Data1> </root>

      Using a slightly modified version of your script, I'm able to print the date.

      use strict; use warnings; use XML::Simple; # qw(:strict); use Data::Dumper; my $simple = XML::Simple->new(); my $config = $simple->XMLin('parse3.xml'); # /home/parse3.xml isn't va +lid on my system #print Dumper( $config ); # Uncomment to get a dump of the data struct +ure print $config->{Data1}->{Data2}->{DATE}, ".\n"; __END__ Output: 2000-10-19.
        Thank you for your answer. This is exactly what I tried and I am still not getting anything as my output. One thing I realized is the first field that I am trying to access is "DATE-NOW" and I simply changed the code to
        print $config->{Data1}->{Data2}->{DATE-NOW}, ".\n";
        I am still not getting any output. I installed this XML::Simple module yesterday on my linux and I remember when I was installing this module, it did come up as a warning that I needed XML::SAX and XML::SAX::Expat but it wasn't required and installation still was successful. Could that be the reason for this happening? I appreciate your help. Thanks a lot!

      vparikh:

      The same way, just use your variable name ($config) instead of $VAR1 in your code. I used $VAR1 because I just used the data structure from your post and wanted to minimize changes so you could see how to do it.

      ...roboticus

      When your only tool is a hammer, all problems look like your thumb.