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 № 1Per 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).