在子libxml perl之后插入

时间:2013-12-11 16:18:31

标签: xml perl

<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);

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);