wyrażenie xpath w funkcji findnodes () zwracającej pustą listę węzłów
XML:
<zoo xmlns="http://www.zoo.com" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:schemaLocation="http://www.zoo.com employee.xsd">
<area id="1" posizione="nord" nome="scimmie">
<animale>
<nome>Gigi</nome>
<sesso>Male</sesso>
<eta>3</eta>
</animale>
<animale>
<nome>Gigia</nome>
<sesso>Female</sesso>
<eta>2</eta>
</animale>
</area>
<area id="2" posizione="nord" nome="giraffe">
<animale>
<nome>Giro</nome>
<sesso>Male</sesso>
<eta>6</eta>
</animale>
<animale>
<nome>Gira</nome>
<sesso>Female</sesso>
<eta>5</eta>
</animale>
</area>
</zoo>
kod:
my $parser = XML::LibXML->new;
my $doc = $parser->parse_file("../xml/animals.xml");
my $root = $doc->getDocumentElement();
my $new_animal = $doc->createElement("animale");
my $name_element = $doc->createElement("nome");
$name_element->appendTextNode($name);
my $gender_element = $doc->createElement("sesso");
$gender_element->appendTextNode($gender);
my $age_element = $doc->createElement("eta");
$age_element->appendTextNode($age);
$new_animal->appendChild($name_element);
$new_animal->appendChild($gender_element);
$new_animal->appendChild($age_element);
my $area_element = $root -> findnodes("//area[\@id=$area]")->get_node(1);
$area_element->appendChild($new_animal);
$ area to identyfikator obszaru (zwykle 1 teraz, gdy testuję)
moim celem jest stworzenie nowego zwierzęcia i dodanie go do odpowiedniego obszaru
ale mam problem, że nakaz
my $area_element = $root -> findnodes("//area[\@id=$area]")->get_node(1);
nie zadziała, ponieważ $ area_element jest undef, ponieważ findnodes zawsze zwraca pustą listę węzłów (zaznaczone drukowanie rozmiaru ()).
Myślę, że problemem jest wyrażenie xpath wewnątrz findnodes, ale nie mogę zrozumieć, co jest nie tak, używam tego samego wyrażenia z inną biblioteką (XML :: XPath) i działa.
Co jest nie tak?