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?

questionAnswers(2)

yourAnswerToTheQuestion