2017-12-18 4 views
2

Perl XML :: LibXMLライブラリを使用して、XMLドキュメント内の既存ノードのセットごとに新しいノードを追加しようとしています。ループを使用します。新しいノードを既存のノードのセットに追加する(Perl XML :: LibXML)

#!/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で未定義の値にする方法 『にaddChild』を呼び出すことはできませんこれは、これまでの私の試みです。 PL線16。

ヒントをお聞かせください。

答えて

4

あなたは、私が$node->addChild($elm)あなたのコードの作品で$_->addChild($elm)を交換し、この出力を与えた場合、あなたのforループイテレータ変数は

:-) $node$_であるかどうかあなたの心を補うために必要があります。

<?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> 
+0

多くのおかげでそのバグを発見するためのDave。私は思っていた以上に解決策に近づきました。 – tcdaly

関連する問題