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:
would produce: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;
<foo> <bar>AIX</bar> </foo>
In reply to Re: Replacing an XPath node with the value of its content
by derby
in thread Replacing an XPath node with the value of its content
by stylechief
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |