我正在尝试向现有XML文档添加新节点。
但是,尝试在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 :(得分:4)
要将新节点插入文档,请使用
$category_nodelist->[0]->appendChild($book_el);
答案 1 :(得分:1)
请注意,XML是基于TREE的数据结构。 XML::LibXML
是一个libxml2解析器,用于根据XML数据构造树数据结构。
XML::LibXML::NodeList
是符合搜索条件的节点列表。因此,向此列表添加新节点不会对XML进行任何更改。
要添加新节点,首先要从节点列表中找到节点并调用合适的子
appendChild
addChild
addSibling
还有更多。希望这对你有所帮助。
答案 2 :(得分:0)
快速阅读精细手册让我觉得你应该使用DOM interface,而不是推送和弹出(除了修改列表,而不是你发现的底层DOM)。