2017-12-18 22 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

당신은 당신의 for 루프 반복자 변수가 나는 $_->addChild($elm)$node->addChild($elm)와 코드가 작동을 교체 할 경우 $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

많은 감사를 그 버그를 발견 한 데이브. 나는 내가 생각했던 것보다 더 해결책에 가까웠다. – tcdaly