/ /要素の祖先を挿入する方法 - xml、perl、xpath、xml-libxml

要素の祖先を挿入する方法 - xml、perl、xpath、xml-libxml

私は "C"要素の祖先としてB1要素を挿入したいと思います。以下は私のサンプルxmlとperlコードを貼り付けたものです

入力

  <A>
<B>
<C>
<D>name</D>
<E>number</E>
</C>
</B>
</A>

出力

<A>
<B>
<B1></B1>
<C>
<D>name</D>
<E>number</E>
</C>
</B>
</A>

私はこのような出力を必要としたい

 <A>
<B>
<B1>
<C>
<D>name</D>
<E>number</E>
</C>
<B1>
</B>
</A>

私のコード

私はそれが挿入されたコードを実行すると唯一の要素のタイトルはacestorを作成しません。

#!/usr/bin/perl

use strict;

use warnings;

use XML::LibXML;

my $parser = XML::LibXML->new;

my $doc = $parser->parse_file("mytest.xml");

my $root = $doc->getDocumentElement();

my ($ref_node) = $doc->findnodes("AB");

my $new_element= $doc->createElement("B1");

$ref_node->parentNode->insertAfter($new_element, $ref_node);

print $root->toString(1);

回答:

回答№1の場合は3

内部ノードを削除して、それを新しい要素に挿入する必要があります:

#!/usr/bin/perl
use warnings;
use strict;

use XML::LibXML;

my $doc         = "XML::LibXML"->load_xml( location => "mytest.xml" );
my $root        = $doc->getDocumentElement();
my $new_element = $doc->createElement("B1");

my ($parent) = $doc->findnodes("/A/B");
my ($inner)  = $parent->findnodes("C");

$new_element->addChild($inner);
$parent->addChild($new_element);

print $root->toString();

または、より短いコードでは、 XML :: XSH2

open mytest.xml ;
wrap B1 A/B/C ;
save :b ;