2012-01-04 62 views
1

我試圖將新節點添加到現有XML文檔。如何使用Perl將新節點添加到NodeList(XML :: LibXML)

但是,嘗試使用XML::LibXML::NodeList結果中的推送功能不會更改文檔。

下面是一個例子:

#!/usr/bin/perl 
use strict; 
use XML::LibXML; 

my $parser  = XML::LibXML->new(); 
my $xml_string = 
'<example> 
    <books> 
     <category id="1"> 
      <book isbn="a" /> 
      <book isbn="b" /> 
      <book isbn="c" /> 
     </category> 
     <category id="2"/> 
     <category id="3"/> 
    </books> 
</example>'; 
my $doc = $parser->parse_string($xml_string); 
my $category_nodelist = $doc->findnodes('//category[@id="1"]'); 

my $book_el = $doc->ownerDocument->createElement('book'); 
$book_el->setAttribute("isbn", "d"); 
$category_nodelist->push($book_el); 

print $doc->toString(1); 
+0

請勿鏈接到確切的[用戶/版本URL](http://search.cpan.org/~shlomif/XML-LibXML-1.89/lib/XML/LibXML/NodeList.pm)。請使用其中一個永久鏈接[search.cpan.org/perldoc/...](http://search.cpan.org/perldoc/XML::LibXML::NodeList)[metacpan.org/module/... ](http://metacpan.org/module/XML::LibXML::NodeList)[p3rl.org](http://p3rl.org/XML::LibXML::NodeList)。 (除非你需要使用特定版本) – 2012-01-04 17:35:31

+0

感謝您的評論!固定。 – HerbSpiral 2012-01-05 09:00:00

回答

4

要插入新的節點插入到文檔,使用

$category_nodelist->[0]->appendChild($book_el); 
0

精細手冊的快速細讀讓我覺得,你應該使用DOM interface,而不是push和pop(除了修改列表外,沒有其他更改,因爲你發現了)。

1

請注意,XML是基於TREE的數據結構。 XML::LibXML是一個libxml2解析器,用於從XML數據構造樹形數據結構。 XML::LibXML::NodeList是與您的搜索條件相匹配的節點的列表。因此,向該列表中添加新節點不會對XML進行任何更改。

要添加一個新的節點,首先找到您的節點列表中的節點,並調用合適的子

appendChild 
addChild 
addSibling 

等等。希望這會對你有所幫助。