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";
                }
        }

}
=============================

=========== Sample Data ==========
<?xml version = "1.0" encoding= "utf-8"?>
...snip
        <address number="1016">
                <code>B679OOO00</code>
                <record_type>client</record_type>
                <address_type>shipping</address_type>
                <Postcode></Postcode>
                <Country>GBR</Country>
                <lines>
                        <line>DO NOT USE THIS CODE</line>
                </lines>
        </address>
        <address number="1014">
                <code>P982LUS00</code>
                <record_type>client</record_type>
                <address_type>shipping</address_type>
                <Postcode>HR2 0AU</Postcode>
                <Country>GBR</Country>
                <lines>
                        <line>UPPER HOUSE FARM</line>
                        <line>BACTON</line>
                        <line>ESSEX</line>
                        <line>EX2 0AU</line>
                </lines>
        </address>
        <address number="1333">
                <code>A234ULE00</code>
                <record_type>client</record_type>
                <address_type>shipping</address_type>
                <Postcode></Postcode>
                <Country>AND</Country>
                <lines>
                        <line>QUEENS HOUSE</line>
                        <line>1 BUCKINGHAM PALACE</line>
                        <line>LONDON WC2H</line>
                        <line>****NOT AT THIS ADDRESS ANY 
MORE.</line>
                        <line>***************</line>
                </lines>
        </address>
        <address number="1018">
                <code>A&amp;MPUB00</code>
                <record_type>client</record_type>
                <address_type>shipping</address_type>
                <Postcode>PO19 8SQ</Postcode>
                <Country>GBR</Country>
                <lines>
                        <line>THE ATRIUM</line>
                        <line>SOUTHERN GATE</line>
                        <line>CHICHESTER</line>
                        <line>SUSSEX</line>
                        <line>PO19 8SQ</line>
                </lines>
        </address>


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to