在子libxml perl之后插入
在子libxml perl之后插入,xml,perl,Xml,Perl,$node[0]是引用的节点(即我们要插入的相对节点)。让我们把它叫做$ref\u node 您的代码存在以下问题: 您希望在top的第一个元素之后插入,而不是第二个元素 您希望将其作为$ref\u node->parentNode的子节点插入,而不是$ref\u node 您希望在$ref\u节点之后插入它,而不是在未定义之后插入它 当需要findnodes(返回实际节点)时,您还使用了find(返回节点列表) 所以 answer returns=无法通过包“XML::LibXML::No
$node[0]
是引用的节点(即我们要插入的相对节点)。让我们把它叫做$ref\u node
您的代码存在以下问题:
- 您希望在
的第一个top
之后插入,而不是第二个元素元素
- 您希望将其作为
的子节点插入,而不是$ref\u node->parentNode
$ref\u node
- 您希望在
之后插入它,而不是在$ref\u节点
之后插入它未定义
- 当需要
(返回实际节点)时,您还使用了findnodes
(返回节点列表)find
answer returns=无法通过包“XML::LibXML::NodeList”找到对象方法“parentNode”。注意:在我的一些变体中,我已经了解到了这一点。@Paul:所以有几个节点与XPath匹配。我没有看到,请参见给定的XML和XPath。但find似乎会返回带有给定xpath的nodelist。注意,这也给了我相同的错误my@ref_node=$doc->find(“//top/element[2]”)$ref_节点[0]->parentNode->insertAfter($new_元素,$ref_节点[0])@Paul,您还必须将
find
更改为findnodes
。调整了我的答案。@Jacques,嗯。。。显然,您需要指定要添加节点的元素!所有的append/insert方法都会在应该添加节点的元素上调用。
<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);
my ($ref_node) = $doc->findnodes('//top/element[1]');
$ref_node->parentNode->insertAfter($new_element, $ref_node);