[Rio-pm] Dúvida: Perl com XML

breno breno em rio.pm.org
Sexta Julho 8 14:49:17 PDT 2011


2011/7/8 Taciana Gomes <taciana.alessandra em gmail.com>:
> http://pastebin.com/HKxrGArq
>
> Obrigada  =)


Oi Taciana,

da próxima vez, por favor encaminhe pelo menos a dúvida direto no
corpo da mensagem, assim fica mais fácil entender do que você está
falando.

Outra: não cole parte do código, monte um exemplo mínimo de código que
consiga ser executado fora do seu programa principal e reproduza o
problema, e cole isso. Por exemplo, nesse caso, existem trocentos
módulos para tratamento de XML, e precisei procurar para saber que
está usando o XML::LibXML. Está? Ou é outro e me enganei? De qualquer
forma, acho que ilustra bem o problema de arrancar um trecho de código
sem um mínimo de contexto :-)

Dito isso, acho que você pode usar exatamente o que está sendo feito
no script para pegar os nodes "concept" e colocar em $result. Que tal
trocar o seu foreach disso:

----------8<----------
my $results = $root->findnodes('/success/data/annotatorResultBean/annotations/annotationBean/concept');
foreach my $c_node ($results->get_nodelist){
        $sinonimos = $c_node->findvalue('synonyms');
        print "\n Sinonimos: ". $sinonimos."\n";
}
---------->8----------

Para algo como isso (atenção - código não testado!):

----------8<----------
my $results = $root->findnodes('/success/data/annotatorResultBean/annotations/annotationBean/concept');
foreach my $c_node ($results->get_nodelist) {
        print "\n Sinonimos: ";
        foreach my $sinonimo ( $c_node->findnodes('synonyms') ) {
              print $sinonimo->to_literal;
        }
        print "\n";
}
---------->8----------

Não sei dizer se 'synonyms' é uma sub-expressão XPath válida aqui, mas
a idéia é essa: pegar a lista de elementos e observar/manipular seu
conteúdo um por um. O método to_literal() pode não ser o que você
quer, experimente também nodeValue() e textContent() (isto é, supondo
que está usando XML::LibXML).

Espero ter ajudado. Qualquer dúvida, não hesite em enviar para a
lista! Estamos aqui pra isso =)


[]s

-b


Mais detalhes sobre a lista de discussão Rio-pm