将新节点添加到一组现有节点 (Perl XML::LibXML)
Add new nodes to a set of existing nodes (Perl XML::LibXML)
使用 Perl XML::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
还是 $_
:-)
如果我将 $_->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>
使用 Perl XML::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
还是 $_
:-)
如果我将 $_->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>