FYI, I just wanted the TABLE and USERSQL to see if the tables referenced in these 2 fields matches. The other datas are useless in that case.
I've juste changed the if clause :
The thing I couldn't get was how to filter the output, and it was by the findnodes() function.#!/usr/bin/perl use strict; use warnings; use XML::Twig::XPath; my $file = "T:/BI/Jerome/xml/Portage.xml"; my $t= XML::Twig::XPath->new( twig_roots => { Job => \&job}, pretty_pr +int => 'indented'); $t->parsefile( $file ); print_to_file('T:/BI/Jerome/xml/traite.xml'); exit; sub job { my ($t, $job)= @_; my @sub_record_table= $job->findnodes( './/SubRecord[./Property[@N +ame="Name" and text()="TABLE"]]'); return unless( @sub_record_table); my $out_job= XML::Twig::Elt->new( job => { identifier => $job->att +( 'Identifier') }); foreach my $sub_record ( @sub_record_table) { my $table = $sub_record->field( 'Property[@Name="Value"]'); $out_job->insert_new_elt( last_child => TABLE => $table); my $found_sql=0; while( !$found_sql) { $sub_record= $sub_record->next_sibling( 'SubRecord') or la +st; my $tag= $sub_record->field( 'Property[@Name="Name"]'); my $content= $sub_record->field( 'Property[@Name="Value"]' +); #if( $content ne 'No') # { $found_sql=1; # $out_job->insert_new_elt( last_child => $tag => $cont +ent); # } if ( $tag =~ /USERSQL/) { $found_sql = 1; $out_job->insert_new_elt( last_child => $tag => $conte +nt); } } } $out_job->print(); $t->purge; # if you need to free the memory }
Really appreciated your help and the time you've spent on my problem.
Regards.
Jerome.
In reply to Re^6: XML::Twig usage incomprehension
by Jerome
in thread XML::Twig usage incomprehension
by Jerome
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |