Re: XML::LibXML navigation
- From: rob.dixon@xxxxxxx (Rob Dixon)
- Date: Fri, 12 Jan 2007 17:06:41 +0000
Beginner wrote:
Hi,
I have to do some sanity checks on a large xml file of addresses (snip below). I have been using XML::LibXML and seem to have started ok but I am struggling to navigate around a record.
In the sample date below your'll see some addresses with "DO NOT..." in. I can locate them easily enough but I am struggling to navigate back up the DOM to access the code so I can record the code with faulty addresses.
Here my effort. Can anyone help me either to move backup up to the right element node or catch the code node before I begin to loop through the address line(s).
TIA,
Dp.
======= My Effort ==========
#!/usr/bin/perl
use strict;
use warnings;
use XML::LibXML;
my $file = 'ADDRESS.XML';
open(FH,$file) or die "Can't open file $file: $!\n";
my $parser = XML::LibXML->new;
my $doc = $parser->parse_fh(\*FH);
my @results = $doc->findnodes('//address');
foreach my $i (@results) {
my @addlines = $i->findnodes('//line');
foreach my $l (@addlines) {
if ($l->string_value =~ /\s+NOT\s+/) {
my $p = $i->nodePath;
$p .= '/code';
print $p->nodeValue,"\t";
print $l->string_value, "\t";
print $l->string_value, "\n";
}
}
}
[snip XML]
If I understand you correctly then all you need is
my @results = $doc->findnodes('/dataroot/address[contains(lines/line, "DO NOT USE")]');
foreach my $address (@results) {
my $code = $address->findvalue('code');
print $code, "\n";
}
which prints the code of all those addresses that have a line containing 'DO NOT USE'. Is that what was required?
(Note that I've assumed a root node <dataroot>. You will need to change the node
name to the actual value.)
HTH,
Rob
.
- Follow-Ups:
- Re: XML::LibXML navigation
- From: Beginner
- Re: XML::LibXML navigation
- References:
- XML::LibXML navigation
- From: Beginner
- XML::LibXML navigation
- Prev by Date: Re: array searching
- Next by Date: Re: XML::LibXML navigation
- Previous by thread: XML::LibXML navigation
- Next by thread: Re: XML::LibXML navigation
- Index(es):
Relevant Pages
|