[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