/ / Come aggiungere un nuovo nodo a un NodeList utilizzando Perl (XML :: LibXML) - xml, perl, libxml2

Come aggiungere un nuovo nodo a un NodeList utilizzando Perl (XML :: LibXML) - xml, perl, libxml2

Sto cercando di aggiungere un nuovo nodo a un documento XML esistente.

Tuttavia, provare a utilizzare la funzione push in a XML :: :: LibXML NodeList risultato non cambia il documento.

Ecco un esempio:

#!/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);

risposte:

4 per risposta № 1

Per inserire il nuovo nodo nel documento, utilizzare

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

1 per risposta № 2

Si noti che XML è una struttura dati basata su TREE. XML::LibXML è un parser libxml2 per costruire la struttura dati dell'albero da un dato XML. XML::LibXML::NodeList è una LISTA dei nodi che corrisponde ai tuoi criteri di ricerca. Quindi, l'aggiunta di un nuovo nodo a questo elenco non apporterà alcuna modifica all'XML.

Per aggiungere un nuovo nodo, prima trova il nodo dal tuo nodelist e chiama il sub adatto

appendChild
addChild
addSibling

e tanti altri. Spero che questo ti sia d'aiuto.


0 per risposta № 3

Una rapida lettura di The Fine Manual mi fa pensare che dovresti usare il Interfaccia DOM, non push e pop (che non fanno altro che modificare la lista, non il DOM sottostante, come hai scoperto).