<root>
<element>abc</element>
<top>
<element>after</element>
<element>before</element>
</top>
<element>456</element>
</root>
我想在元素之后和元素之前插入另一个元素。 尝试了一些变化,必须遗漏一些东西。
#!/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 @node = $doc->find('//top/element[2]');
my $new_element= $doc->createElement("element");
$new_element->appendText('testing');
$node[0]->insertAfter($new_element, undef);
print $root->toString(1);
答案 0 :(得分:2)
$node[0]
是引用的节点(即我们想要插入的节点)。我们改为称之为$ref_node
。
您的代码存在以下问题:
element
的第一个top
之后插入,而不是第二个。{/ li>
$ref_node->parentNode
的孩子插入,而不是$ref_node
。$ref_node
后插入,而不是在undef
之后插入。find
(返回实际节点)时,您还使用findnodes
(返回NodeList)。所以,
my ($ref_node) = $doc->findnodes('//top/element[1]');
$ref_node->parentNode->insertAfter($new_element, $ref_node);