http://qs321.pair.com?node_id=1059164


in reply to Replacing an XPath node with the value of its content

Is the tm element the only child of another node? If so, you can get the parent of the matching node, remove it's children, then insert the text node:

use strict; use warnings; use XML::LibXML; my $xml_str = <<_XML_STR; <foo> <bar> <tm tmclass="ibm" tmowner="IBM Corporation" tmtype="reg" trademark="AIX">AIX</tm> </bar> </foo> _XML_STR my $parser = XML::LibXML->new(); my $doc = $parser->parse_string( $xml_str ); my $query = "//tm"; foreach my $node ( $doc->findnodes($query) ) { my $val = $node->findvalue( '@tmowner' ); my $txt = $node->textContent(); if( $val !~ /my_company/ ) { my $parent = $node->parentNode(); $parent->removeChildNodes(); $parent->appendTextNode( $txt ); } } print $doc->toString;
would produce:
<foo> <bar>AIX</bar> </foo>
-derby