如何使用Perl将新节点添加到NodeList(XML :: LibXML)
问题描述:
我试图将新节点添加到现有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);
答
要插入新的节点插入到文档,使用
$category_nodelist->[0]->appendChild($book_el);
答
请注意,XML是基于TREE的数据结构。 XML::LibXML
是一个libxml2解析器,用于从XML数据构造树形数据结构。 XML::LibXML::NodeList
是与您的搜索条件相匹配的节点的列表。因此,向该列表中添加新节点不会对XML进行任何更改。
要添加一个新的节点,首先找到您的节点列表中的节点,并调用合适的子
appendChild
addChild
addSibling
等等。希望这会对你有所帮助。
请勿链接到确切的[用户/版本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
感谢您的评论!固定。 – HerbSpiral 2012-01-05 09:00:00