in reply to Re: newbie : XPath - including element attributes
in thread newbie : XPath - including element attributes

Blanked this reply - Attempt 2 with correct formatting to follow :
  • Comment on Re^2: newbie : XPath - including element attributes

Replies are listed 'Best First'.
Re^3: newbie : XPath - including element attributes
by jxh (Acolyte) on Jan 25, 2006 at 19:24 UTC
    Many thanks to all ( esp. mirod ) - this was *extremley* usefull info.
    To refine my origional request, I wanted to see elements ( with their attributes ) and any corresponding values ( but with no recursion ) - if such values exist.
    ( This is because the element attributes themselves sometimes contain 'data' by their very name / existance )
    My finished code, with an example of requirement / result :
    foreach my $file ( @filelist ) { my $twig= new XML::Twig(); $twig->parsefile($file); my $twig_root = $twig->root; foreach my $xpath_arg ( @xpath_args ) { my @xpath_result = $twig_root->get_xpa +th($xpath_arg); foreach ( @xpath_result ) { print &complete_path($ +_); $_->contains_only_text + ? print ' : ' . $_->text . "\n" : print "\n"; } } } sub complete_path() { my( $elt )= @_; return '/' . join( '/', map { tag_desc($_) } reverse $elt->anc +estors_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; } Running : ./show_xpath_value.pl -x '//*[@keep="1"]' /doc/elt[att1="1" keep="1"] /doc/elt[att1="1" keep="1"]/elt2[att2="2" keep="1"] : foo /doc/elt[att1="1"]/elt2[att2="2" keep="1"] : bar2 /doc/elt[att1="1" keep="1"] /doc/elt[att1="1" keep="1"]/elt2[att2="2" keep="1"] : foo3 /doc/elt[att1="1" keep="1"]/elt2[att2="2" keep="1"] : bar3
    Giving me just what I wanted ! Thanks again.