Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation

Re: Replacing an XPath node with the value of its content

by derby (Abbot)
on Oct 21, 2013 at 21:28 UTC ( #1059164=note: print w/replies, xml ) Need Help??

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>

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

    Thanks, Derby, this is a step in the right direction.

    Unfortunately, it is not the only child of another node. In fact, there may be multiple <tm> or other children within a given parent.

    This <tm> element is being used to trigger inline formatting during output processing. In this example, a superscript "TM" would be added automatically like AIXTM. So there may be more than 1 in the same sentence, paragraph, etc. within a single parent.

    Testing your suggestion, it certainly removes the <tm> child, but appends the "AIX" to the very end of the parent, as one would expect (and as you insinuated).

    I am currently looking into the XML::LibXML::Document class. It has some methods that look promising, perhaps I can use a fragment or text node somehow.

    Thanks for looking into this!


Log In?

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1059164]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (3)
As of 2022-12-10 03:13 GMT
Find Nodes?
    Voting Booth?

    No recent polls found