/ / Perl(XML :: LibXML)を使用してNodeListに新しいノードを追加する方法 - xml、perl、libxml2

Perl(XML :: LibXML)を使ってNodeListに新しいノードを追加する方法 - xml、perl、libxml2

既存の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);

回答:

回答№1は4

新しいノードをドキュメントに挿入するには、次のようにします。

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

回答№2の場合は1

XMLはTREEベースのデータ構造であることに注意してください。 XML::LibXML XMLデータからツリーデータ構造を構築するためのlibxml2パーサーです。 XML::LibXML::NodeList あなたの検索基準に合ったノードのリストです。したがって、このリストに新しいノードを追加しても、XMLは変更されません。

新しいノードを追加するには、まずノードリストからノードを見つけ、適切なサブ

appendChild
addChild
addSibling

などなど。これがあなたに役立つことを願っています。


回答№3の場合は0

The Fine Manualをよく読んでみると、 DOMインタフェースプッシュとポップではありません(あなたが見つけたように、リストを変更する以外に何もしません)。