#!/usr/bin/perl use strict; use warnings; use XML::Twig; my $xpath_arg= '//*[@keep="1"]'; my $twig= XML::Twig->new( elt_class => 'my_elt')->parse( \*DATA); my $twig_root= $twig->root; my @res = $twig_root->get_xpath($xpath_arg); foreach ( @res ) { print $_->complete_path . " : "; print $_->text . "\n"; } package my_elt; use base 'XML::Twig::Elt'; sub complete_path { my( $elt)= @_; return '/' . join( '/', map { $_->tag_desc } reverse $elt->ancestors_or_self); } sub tag_desc { my( $elt)= @_; my %atts= %{$elt->atts}; my $atts= %atts ? '[' . join( " ", map { qq{$_="$atts{$_}"} } sort keys %atts) . ']' : ''; return $elt->tag . $atts; } package main; __DATA__ foo bar foo2 bar2 foo3 bar3