Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在子libxml perl之后插入_Xml_Perl - Fatal编程技术网

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