[Omaha.pm] Beginning working with XML::Twig.

Christopher Cashell topher-pm at zyp.org
Mon Jun 6 21:18:27 PDT 2011


2011/6/6 Dan Linder <dan at linder.org>:
> Anyone want to throw me some additional subroutines I need to grok?

If this is something that you want or need to do with XML::Twig, then feel
free to ignore the rest of this e-mail.  If you're just trying to extract
the data from the XML, and you don't care how, then another option to
consider is XML::XPath.  I've read lots of good things about XML::Twig, and
heard great things about it from people who have used it, but I have yet to
need it.  However, I have had cases where I needed to extract some data from
an XML file, and the best tool I've found for simple extraction is
XML::XPath.  Below is some sample code that pulls out the two bits of data
you specified using XML::XPath.

#!/usr/bin/env perl
# vim: ts=3 sw=3 et sm ai smd sc bg=dark
#######################################################################
# xpath-test.pl - example script to show extracting data with XML::XPath
#######################################################################

use 5.012; # Enable modern features.
use utf8;

use strict;
use warnings;
use Carp;
use XML::XPath;
use XML::XPath::XMLParser;

# Read in our XML File.
my $xp = XML::XPath->new(filename => 'test-data.xml');

# Try to get the start time - Note that we're not getting back a real
# string here, we're getting back an XML::XPath::Literal with available
# stringification
my $start_time = $xp->findvalue('/collection_status/check_starttime');
say "Start Time: " . $start_time;
croak "Couldn't get start time" unless $start_time;

# Now we'll try to pull back our instance times
my $nodeset = $xp->find('/collection_status/instance/time_of_last_rate_dp');

if (my @nodelist = $nodeset->get_nodelist) {
  # If we got here, then there were (valid) results from our find
  foreach my $node (@nodelist) {
     say "Instance Time: " . $node->string_value;
  }
}
else {
  croak "Couldn't find any last rate times";
}

> Dan

-- 
Christopher
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/omaha-pm/attachments/20110606/1f90fe98/attachment.html>


More information about the Omaha-pm mailing list