in reply to XML Parser issue
Here's the solution using XML::Rules:
#!/usr/bin/perl use warnings; use strict; use XML::Rules; use Data::Dumper; my $xml = do { local $/; <DATA>}; my $parser = XML::Rules->new( rules => [ _default => 'content', page => 'no content array', story => 'pass no content', ] ); my $data = $parser->parse($xml); print Dumper $data->{page}; __DATA__ <story> <page> <author>Author 1 </author> <keywords>Keyword1 </keywords> <headline>Headline1 </headline> <image> Image1 </image> <description>Desc 1 </description> </page> <page> <author>Author 2</author> <keywords>Keyword2 </keywords> <headline>Headline 2 </headline> <image> Image2 </image> <description>Decs 2 </description> </page> </story>
If you wanted to process each <page> separately, as the file is parsed, you could do something like this:
#!/usr/bin/perl use warnings; use strict; use XML::Rules; use Data::Dumper; my $xml = do { local $/; <DATA>}; my $parser = XML::Rules->new( rules => [ _default => 'content trim', page => sub { print <<"*END*" "$_[1]->{headline}" by $_[1]->{author} Keywords: $_[1]->{keywords} Description: $_[1]->{description} *END* }, story => '', ] ); $parser->parse($xml); __DATA__ ...
|
|---|