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:
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>
-derby
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^2: Replacing an XPath node with the value of its content
by stylechief (Sexton) on Oct 21, 2013 at 22:54 UTC |
In Section
Seekers of Perl Wisdom