Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

Re^2: Extracting XML data from a tree

by Jenda (Abbot)
on Jun 05, 2013 at 08:30 UTC ( #1037170=note: print w/ replies, xml ) Need Help??


in reply to Re: Extracting XML data from a tree
in thread Extracting XML data from a tree

See Simpler than XML::Simple.

Your code would break if there were multiple <Time> tag in one <Times>. Here's one of the ways to do this with XML::Rules. It handles the multiple <Time> tags and stops processing the XML once it finds the requested day.

use strict; use XML::Rules; use Data::Dumper; my $parser = XML::Rules->new( strispaces => 7, rules => { Time => 'as array', Times => 'pass', 'Day' => sub { my ($tag_name, $attrs, $context, $parent_data, $parser) = +@_; if ($attrs->{'day-of-week'} eq $parser->{parameters}) { $parser->return_this(join(', ', grep( defined($_), map + $_->{'start-time'}, @{$attrs->{Time}}))); } }, Month => sub{} } ); my $time = $parser->parse(\*DATA, 'MondayX'); print "Time: $time\n"; __DATA__ <?xml version="1.0" encoding="utf-8"?> <Month> <Week>

Jenda
Enoch was right!
Enjoy the last years of Rome.


Comment on Re^2: Extracting XML data from a tree
Download Code
Re^3: Extracting XML data from a tree
by hdb (Prior) on Jun 05, 2013 at 08:51 UTC

    Agreed. The story does not look as favorable for XML::Simple anymore if the structure changes. If one makes it more robust using ForceArray => 1, then at least one more loop is required:

    my $xml = XMLin( 'CC.xml', ( ForceArray => 1 ) ); for my $day (@{ $xml->{Week}[0]{Day} }) { next unless $day->{'day-of-week'} eq "Tuesday"; for my $time ( @{ $day->{Times}[0]{Time} } ) { print $time->{'start-time'},"\n" if exists $time->{'start-time'}; } }

    Not really so "simple" anymore...

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1037170]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (9)
As of 2015-07-07 11:08 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (88 votes), past polls