1#! /usr/bin/perl -w 2 3# $Id: xpath.pl,v 1.1.1.2 2007/10/10 23:04:14 ahuda Exp $ 4 5use XML::LibXML; 6 7my $parser = XML::LibXML->new(); 8my $xpath = shift @ARGV; 9 10if ( scalar @ARGV ) { 11 foreach ( @ARGV ) { 12 my $doc = $parser->parse_file( $_ ); 13 my $result = $doc->find( $xpath ); 14 handle_result( $result ); 15 undef $doc; 16 } 17} 18else { 19 # read from std in 20 my @doc = <STDIN>; 21 my $string = join "", @doc; 22 my $doc = $parser->parse_string( $string ); 23 my $result = $doc->find( $xpath ); 24 exit handle_result( $result ); 25} 26 27sub handle_result { 28 my $result = shift; 29 30 return 1 unless defined $result; 31 32 if ( $result->isa( 'XML::LibXML::NodeList' ) ) { 33 foreach ( @$result ) { 34 print $_->toString(1) , "\n"; 35 } 36 return 0; 37 } 38 39 if ( $result->isa( 'XML::LibXML::Literal' ) ) { 40 print $result->value , "\n"; 41 return 0; 42 } 43 44 if ( $result->isa( 'XML::LibXML::Boolean' ) ){ 45 print $result->to_literal , "\n"; 46 return 0; 47 } 48 49 return 1; 50} 51