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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.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
将新节点添加到一组现有节点(PerlXML::LibXML)_Xml_Perl_Libxml2 - Fatal编程技术网

将新节点添加到一组现有节点(PerlXML::LibXML)

将新节点添加到一组现有节点(PerlXML::LibXML),xml,perl,libxml2,Xml,Perl,Libxml2,使用PerlXML::LibXML库,我试图使用循环向XML文档中的一组现有节点中的每一个添加一个新节点。这是我迄今为止的尝试: #!/usr/bin/perl -w use 5.14.2; use XML::LibXML; my $filename = "xml_doc.xml"; my $parser = XML::LibXML->new(); $parser->keep_blanks(0); my $dom = $parser->parse_file($filename

使用PerlXML::LibXML库,我试图使用循环向XML文档中的一组现有节点中的每一个添加一个新节点。这是我迄今为止的尝试:

#!/usr/bin/perl -w
use 5.14.2;
use XML::LibXML;

my $filename = "xml_doc.xml";
my $parser = XML::LibXML->new();
$parser->keep_blanks(0);
my $dom = $parser->parse_file($filename);

for my $node ($dom->findnodes("/poem/stanza/v"))
{
    my $elm = $dom->createElement('newnode');
    $elm->appendText('This is a new node');
    $_->addChild($elm);
}

say $dom->toString(1);
文件“xml_doc.xml”:

<?xml version="1.0" encoding="UTF-8"?>
<poem>
<stanza>
<v>As I was going to Bonner,</v>
<v>Upon my word of honor,</v>
<v>I met a pig</v>
<v>Without a wig,</v>
<v>As I was going to Bonner.</v>
</stanza>
</poem>

当我去邦纳的时候,
我发誓,
我遇到一头猪
没有假发,
当我要去邦纳的时候。
程序失败,错误为“无法对batch_add_nodes.pl第16行的未定义值调用方法“addChild”


欢迎提供任何提示。

您需要决定您的
for
循环迭代器变量是
$node
还是
$。
:-)

如果我用
$node->addChild($elm)
替换
$node->addChild($elm)
您的代码工作并给出以下输出:

<?xml version="1.0" encoding="UTF-8"?>
<poem>
  <stanza>
    <v>As I was going to Bonner,<newnode>This is a new node</newnode></v>
    <v>Upon my word of honor,<newnode>This is a new node</newnode></v>
    <v>I met a pig<newnode>This is a new node</newnode></v>
    <v>Without a wig,<newnode>This is a new node</newnode></v>
    <v>As I was going to Bonner.<newnode>This is a new node</newnode></v>
  </stanza>
</poem>

当我去邦纳的时候,这是一个新的节点
恕我直言,这是一个新节点
我遇到一只猪这是一个新节点
没有假发,这是一个新节点
我正要去邦纳,这是一个新节点

非常感谢Dave发现了这个bug。我比我想象的更接近解决方案。