Próbuję dodać nowy węzeł do istniejącego dokumentu XML.
Jednak próbuje użyć funkcji push w XML :: LibXML :: NodeList wynik nie zmienia dokumentu.
Oto przykład:
#!/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);
Odpowiedzi:
4 dla odpowiedzi № 1Aby wstawić nowy węzeł do dokumentu, użyj
$category_nodelist->[0]->appendChild($book_el);
1 dla odpowiedzi nr 2
Należy pamiętać, że XML jest strukturą danych opartą na drzewie. XML::LibXML
to parser libxml2 do konstruowania struktury danych drzewa z danych XML.
XML::LibXML::NodeList
to LISTA węzłów spełniających twoje kryteria wyszukiwania. Dodanie nowego węzła do tej listy nie spowoduje żadnych zmian w kodzie XML.
Aby dodać nowy węzeł, najpierw znajdź węzeł od swojej nodelisty i wywołaj odpowiedni podrzędny
appendChild
addChild
addSibling
i wiele więcej. Mam nadzieję, że to ci pomoże.
0 dla odpowiedzi № 3
Szybki przegląd The Fine Manual pozwala mi sądzić, że powinieneś używać tego Interfejs DOM, nie push i pop (które nie robią nic więcej niż modyfikowanie listy, a nie ukryty DOM, jak się dowiedziałeś).