#############################################################################
## Name: XPath.pm
## Purpose: XML::Smart::XPath - Compatibility with XPath (through XML::XPath).
## Author: Graciliano M. P.
## Modified by: Harish Madabushi
## Created: 01/10/2003
## RCS-ID:
## Copyright: (c) 2003 Graciliano M. P.
## Licence: This program is free software; you can redistribute it and/or
## modify it under the same terms as Perl itself
#############################################################################
### MAINTAINER NOTE: Contains MEMLeak ####
package XML::Smart::XPath ;
use 5.006 ;
use strict ;
use warnings ;
require Exporter ;
use XML::Smart::Shared qw( _unset_sig_warn _reset_sig_warn ) ;
our ($VERSION , @ISA) ;
$VERSION = '0.05' ;
@ISA = qw(Exporter) ;
our @EXPORT = qw(xpath XPath xpath_pointer XPath_pointer) ;
our @EXPORT_OK = @EXPORT ;
my $load_XPath ;
##############
# LOAD_XPATH #
##############
sub load_XPath {
return $load_XPath if $load_XPath ;
eval(q`use XML::XPath ;`);
if ($@) {
warn("Error loading module XML::XPath! Can't use XPath with XML::Smart! Please install XML::XPath.");
$load_XPath = undef ;
}
else {
$load_XPath = 1 ;
$XML::XPath::SafeMode = 1 ;
}
return $load_XPath ;
}
#########
# XPATH #
#########
sub XPath { &xpath } ;
sub xpath {
my $this = shift ;
load_XPath() ;
my $xpath ;
if ( $$this->{XPATH} ) { $xpath = ${$$this->{XPATH}} ;}
if (!$xpath){
$xpath = XML::XPath->new(
xml => $this->data(nospace => 1 , noheader => 1)
) ;
$$this->{XPATH} = \$xpath ;
}
if ( !@_ ) { return $xpath ;}
return ;
}
#################
# XPATH_POINTER #
#################
sub XPath_pointer { &xpath_pointer } ;
sub xpath_pointer {
my $this = shift ;
load_XPath() ;
my $xpath = XML::XPath->new(xml => $this->data_pointer(nospace => 1 , noheader => 1)) ;
if ( !@_ ) { return $xpath ;}
return ;
}
#######
# END #
#######
1;