2012-01-04 63 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 

等等。希望这会对你有所帮助。