in reply to Re: XML replacenode
in thread XML replacenode

Hi, it was a typo in my original post. I tried your code and it shows XML::LibXML::Document=SCALAR(0x6e7fd0)

Replies are listed 'Best First'.
Re^3: XML replacenode
by michael99 (Acolyte) on Apr 16, 2020 at 01:15 UTC
    I edited it to load file from my cwd. It seems still interrupting empty node: Code:
    #! /usr/bin/perl use strict; use feature qw{ say }; use warnings; use XML::LibXML; print "Please specify node c content: "; chomp( my $new_text = <STDIN> ); my $file = 'xx.xml'; my $dom = 'XML::LibXML'->load_xml(location => $file); for my $node($dom->findnodes('(/header/id/c)')) { $node->removeChildNodes; $node->appendText($new_text); } #print $dom; open (my $Output, "> $file") or die "Could not write $file"; print $Output $dom->toString(); close ($Output) or die "Could not close generated $file ";
    Output:
    <?xml version="1.0"?> <header> <id x_id="1"> <a/> <b/> <c>as</c> </id> </header>
    Expecting output:
    <?xml version="1.0"?> <header> <id x_id="1"> <a></a> <b></c> <c>something</c> </id> </header>

      The difference between your observed and expected output appears to be down to canonicalisation. See eg:

      #!/usr/bin/env perl use strict; use warnings; use XML::LibXML; my $dom = XML::LibXML->load_xml (string => <<'EOT'); <?xml version="1.0"?> <header> <id x_id="1"> <a/> <b/> <c>as</c> </id> </header> EOT print "\nNot canonical:\n\n" . $dom->toString; print "\nWith canonical:\n\n" . $dom->toStringC14N;