in reply to Re^3: Perl XML parsing with XML::Simple - Having problem with accessing fields
in thread Perl XML parsing with XML::Simple - Having problem with accessing fields

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!
  • Comment on Re^4: Perl XML parsing with XML::Simple - Having problem with accessing fields
  • Download Code

Replies are listed 'Best First'.
Re^5: Perl XML parsing with XML::Simple - Having problem with accessing fields
by roboticus (Chancellor) on Aug 17, 2012 at 18:52 UTC

    vparikh:

    It sounds like the example data you gave us isn't the same thing as what you're running against. I'd suggest dumping the $config data structure just before printing the item of interest. That way, you'll be able to see where you're getting hung up.

    ...roboticus

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

Re^5: Perl XML parsing with XML::Simple - Having problem with accessing fields
by Mr. Muskrat (Canon) on Aug 17, 2012 at 19:01 UTC

    Apparently, the XML doesn't match up to the dump you provided. Add the following before the line where you are trying to print the date so that you can see what the parser thinks the XML looks like.

    print Dumper( $config );

    If you still can't figure it out, provide the XML from /home/parse3.xml.

      Sorry if this is causing the confusion. Alright so I am providing everything again. This is my original XML file:
      <DATA> <DATA1> <TIME>2012-08-04T20:15:04.506-04:00<TIME> <DATA2> <DATE-NOW>2000-10-19</DATE-NOW> <ID>A95</ID> <STATUS>A</STATUS> <TIME/> </DATA2> </DATA1> </DATA>
      And this is my perl script: My goal is to get to - 2000-10-19
      use strict; use warnings; use XML::Simple; # qw(:strict); use Data::Dumper; my $simple = XML::Simple->new(); my $config = $simple->XMLin('parse3.xml'); print Dumper($config) # this prints out parsed xml print $config->{DATA1}->{DATA2}->{DATE-NOW}, ".\n";
      Please let me know what I can change in my code to make it work.
      Thanks everyone again! You have all been a great help!

        If you actually ran the code you posted, you would know what was wrong.

        syntax error at ./parse.pl line 13, near ") #" You lost the semicolon. It should be: print Dumper($config); # this prints out parsed xml

        Once that's fixed you'll encounter two more errors: Bareword "DATE" not allowed while "strict subs" in use at ./parse.pl line 13. Bareword "NOW" not allowed while "strict subs" in use at ./parse.pl line 13.

        Quote DATE-NOW: print $config->{DATA1}->{DATA2}->{'DATE-NOW'}, ".\n";

        Now you'll see there are problems with the XML.. End tag mismatch (DATA1 != TIME) [Ln: 10, Col: 9] I'm assuming you typed it instead of using copy/paste. Here's the corrected XML:

        <DATA> <DATA1> <TIME>2012-08-04T20:15:04.506-04:00</TIME> <DATA2> <DATE-NOW>2000-10-19</DATE-NOW> <ID>A95</ID> <STATUS>A</STATUS> <TIME/> </DATA2> </DATA1> </DATA>

        Here's the code with the above corrections made:

        use strict; use warnings; use XML::Simple; # qw(:strict); use Data::Dumper; my $simple = XML::Simple->new(); my $config = $simple->XMLin('parse3.xml'); print Dumper($config); # this prints out parsed xml print $config->{DATA1}->{DATA2}->{'DATE-NOW'}, ".\n";