rainman rainman - 4 months ago 9
Perl Question

How can i access to nodes with same tag in the same level using XML::LibXML in perl?

I would like to know how can i access to the "li" nodes one by one in the following xml file ???
for example in the first node i want to access only to

<li>¿Si?</li>
, then to
<li>Dime</li>
... i tried to use
findnodes('./template/random/li')
, but i got all the values with li tag.

<?xml version="1.0"?>

<aiml version="1.0">

<category>
<pattern>SARA</pattern>
<template>
<random>
<li>¿Si?</li>
<li>Dime.</li>
<li>¿Qué deseas?</li>
</random>
</template>
</category>
<category>
<pattern>ACTOR</pattern>
<template>
<random>
<li>Mi actor favorito es Arnold Schwarzenegger en "Terminator".</li>
<li>Mi actor favorito es Rutger Hauer en "Blade Runner".</li>
<li>Mi actor favorito es Robin Williams en "El Hombre Bicentenario".</li>
<li>Mi actor favorito es Peter Weller en "Robocop".</li>
<li>Mi actor favorito es Jude Law en "AI".</li>
</random>
</template>
</category>
<category>
<pattern>ACTRIZ</pattern>
<template>
<random>
<li>Mi actriz favorita es Daryl Hannah en "Blade Runner".</li>
<li>Mi actriz favorita es Kristanna Loken en "Terminator 3".</li>
<li>Mi actriz favorita es Persis Khambatta en "Star Trek".</li>
</random>
</template>
</category>
<category>
<pattern>ADAM</pattern>
<template>
<random>
<li>Adam es mi programador. En este momento está muy ocupado.</li>
<li>Adam es mi botmaster. Le daré saludos de tu parte.</li>
</random>
</template>
</category>




Any help ?

Answer

This might help:

my @nodes = $doc->findnodes('//category');
for my $node (@nodes) {
    my $pattern = $node->findvalue('pattern');
    print "$pattern\n";
    my @items = $node->findnodes('template/random/li');
    for my $item (@items) {
        print $item->textContent . "\n";
    }
}

Output:

SARA
Si?
Dime.
Qu deseas?
ACTOR
Mi actor favorito es Arnold Schwarzenegger en "Terminator".
Mi actor favorito es Rutger Hauer en "Blade Runner".
Mi actor favorito es Robin Williams en "El Hombre Bicentenario".
Mi actor favorito es Peter Weller en "Robocop".
Mi actor favorito es Jude Law en "AI".
ACTRIZ
Mi actriz favorita es Daryl Hannah en "Blade Runner".
Mi actriz favorita es Kristanna Loken en "Terminator 3".
Mi actriz favorita es Persis Khambatta en "Star Trek".
ADAM
Adam es mi programador. En este momento est muy ocupado.
Adam es mi botmaster. Le dar saludos de tu parte.
Comments