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