[Cascavel-pm] Res: XML::Parser Tree

Daniel ® Antunes danielrantunes em yahoo.com.br
Sexta Junho 29 18:04:14 PDT 2007


Oi Luiz...
    Pow, obrigadão. Vou seguir as sugestões... Estudando um pouco mais estava caminhando justamente para estas soluções.
    Abraço.
 
Daniel ® Antunes
profissional de informática
msn daniel.legend em terra.com.br
mobile + 55 11 8965 2999
gnu/linux user #238553



----- Mensagem original ----
De: Luis Motta Campos <luismottacampos em yahoo.co.uk>
Para: Cascavel Perl Mongers <cascavel-pm em pm.org>
Enviadas: Sexta-feira, 29 de Junho de 2007 5:05:57
Assunto: Re: [Cascavel-pm] XML::Parser Tree


On Jun 28, 2007, at 10:04 PM, Daniel ® Antunes wrote:
>     Olá amigos da lista,
>     Estou apanhando com uma bobeirinha e acredito que os amigos  
> possam me ajudar.
> Já fiz parsers usando Handlers para grandes documentos e conheço  
> bem o funcionamento.

   Eu vou acreditar em você ;-)

> Agora estou tentando criar um parser usando a opção "Tree", nunca  
> tinha utilizado este método e apesar da simplicidade exposta na  
> "man page" estou apanhando.
>     Segue um script que fiz para testar o funcionamento :
>
> #!/usr/bin/perl
> use XML::Parser;
> my $parser=new XML::Parser;
> my $p=new XML::Parser(Style => 'Tree');
> my $xml=$p->parse('<inquiry>'
>                                         .'<city>2</city>'
>                                         .'<region>CENTER</region>'
>                                         .'<childages>'
>                                             .'<childage>2</childage>'
>                                             .'<childage>11</childage>'
>                                         .'</childages>'
>                                       .'</inquiry>');
> print " 1º\t",$xml,"\n\n";
> print " 2º\t",$$xml[0],"\n\n";
> print " 3º\t",$$xml[1],"\n\n";
> print " 4º\t",$$xml[1][1],"\n\n";
> print " 5º\t",$$xml[1][2],"\n\n";
> print " 6º\t",$$xml[1][3],"\n\n";
> print " 7º\t",$$xml[1][4],"\n\n";
> print " 8º\t",$$xml[1][5],"\n\n";
> print " 9º\t",$$xml[1][6],"\n\n";
>
>     O resultado no console é o seguinte :
>
> 1º     ARRAY(0x815a0e4)
>  2º     inquiry
>  3º     ARRAY(0x815a180)
>  4º     city
>  5º     ARRAY(0x8220f90)
>  6º     region
>  7º     ARRAY(0x8220f30)
>  8º     childages
>  9º     ARRAY(0x82130f4)
> 10º
> 11º
> 12º
>
>     Minha dúvida é : Como navegar pelos elementos. :(
>     Muitíssimo obrigado galera.
>     Abraço.
>
>
> Daniel ® Antunes
> profissional de informática
> msn daniel.legend em terra.com.br
> mobile + 55 11 8965 2999
> gnu/linux user #238553

   Daniel, eu reescrevi o teu programa um pouquinho:

#!perl -l
use strict;
use warnings;
use XML::Parser;
use Data::Dumper;

my $parser = new XML::Parser( Style => 'Tree' );
my $tree = $parser->parse( *DATA );

print Dumper( $tree );

__DATA__
<?xml version="1.0" encoding="ISO-8859-1"?>
<inquiry>
     <city>2</city>
     <region>CENTER</region>
     <childages>
         <childage>2</childage>
         <childage>11</childage>
     </childages>
</inquiry>
__END__

   E obtive o mesmo resultado.

   Agora, para "navegar" nestes elementos, automaticamente, você vai  
precisar construir funções especializadas.
   Eu sugiro tentar usar o XML::Simple, que vai fazer o mesmo  
trabalho, mas vai te dar uma estrutura um pouco mais sofisticada e  
menos "entupida" com as porcarias que você tem nos meta-dados do seu  
XML.

   Outras sugestões:

   * use XML::Compile, que permite validar os dados do XML usando uma  
definição de schema
   * use strict e warnings, que permite manter a sua sanidade mental.

   E uma observação: normalmente, processamento de XML se faz via  
XPath ou XML::Parser (orientado a eventos, o default). Se você está  
tentando construir um leitor de configurações, eu sugiro que olhe o  
Config::General, que resolve o problema de uma forma elegantíssima e  
sem chateação.

   Putamplexos!
--
Luis Motta Campos (a.k.a. Monsieur Champs) is a software engineer,
Perl fanatic evangelist, and amateur {cook, photographer}


_______________________________________________
Cascavel-pm mailing list
Cascavel-pm em pm.org
http://mail.pm.org/mailman/listinfo/cascavel-pm


       
____________________________________________________________________________________
Novo Yahoo! Cadê? - Experimente uma nova busca.
http://yahoo.com.br/oqueeuganhocomisso 
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://mail.pm.org/pipermail/cascavel-pm/attachments/20070629/6f634509/attachment.html 


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