Ir para conteúdo
Fórum Script Brasil
  • 0

XML


churros5

Pergunta

Fala galera,

Bom, é o seguinte. Sou iniciante em perl e gostaria muito de resolver um problema que tem me tirado boas noites de sono. Envolve mais lógica do que a linguagem em si. É o seguinte:

Digamos que eu tenha uma estrutura parecida com um XML da seguinte forma:

<funcao>

<nome>Funcao1</nome> <repeticaofilhos> 3 </repeticaofilhos>

<funcao>

<nome>Funcao3</nome> <repeticaofilhos> 5 </repeticaofilhos>

</funcao>

<funcao>

<nome>Funcao4</nome> <repeticaofilhos> 2 </repeticaofilhos>

</funcao>

</funcao>

<funcao>

<nome>Funcao2</nome> <repeticaofilhos> 2 </repeticaofilhos>

</funcao>

Este exemplo acima, é um tipo de estrutura que pretendo trabalhar no perl.

Repare que as funções 3 e 4 estão dentro da função 1. São filhas da função 1. O meu objetivo é pegar esta estrutura parecida com um XML, e quebrar a árvore e seus nós em algo parecido com isso:

Funcao1

Funcao3

Fimfuncao3

Funcao3

Fimfuncao3

Funcao3

Fimfuncao3

Funcao4

Fimfuncao4

Funcao4

Fimfuncao4

Funcao4

Fimfuncao4

Fimfuncao1

Funcao2

Fimfuncao2

As Funções 3 e 4 aparecem 3 vezes, porque a tag <repeticoesfilho> da funcão 1, que é o nó pai, tem seu valor 3. A função 2 por sua vez, não tem filhos. Mas se tivesse, estes seriam chamados 2 vezes, por causa do valor da tag <repeticoesfilho> da função 2.

Entenderam? Sei que perl é super poderoso, e que em programação tudo é possível, mas não tenho encontrado solução para este problema. Espero que alguém possa me ajudar.

Obrigado!

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Olá, se isso for um XML, use o XML::Simple que ele cuidará de transformar isso numa estrutura Perl.

http://search.cpan.org/~grantm/XML-Simple-...b/XML/Simple.pm

#!/usr/bin/perl

use strict;
use warnings;

use XML::Simple;
use Data::Dumper;
my $xs = XML::Simple->new;
my $ref = $xs->XMLin('meuxml.xml');
print Dumper $ref;

Depois de transformado numa estrutura Perl, você verá que como mágica o seu problema será resolvido.

Link para o comentário
Compartilhar em outros sites

  • 0

Tem também o módulo XML::XPath. Imagine o seguinte XML:

<Biblioteca>
    <Livro ISBN="1234567" Ano="2000">
        <Paginas>300</Paginas>
        <Titulo>A arte de programar em meia-hora</Titulo>
        <Exemplares>
            <Codigo>1</Codigo>
            <Codigo>2</Codigo>
        </Exemplares>
    </Livro>
    <Livro ISBN="7654321" Ano="1710">
        <Paginas>500</Paginas>
        <Titulo>Aprenda a usar o ábaco em 21 dias</Titulo>
        <Exemplares>
            <Codigo>10</Codigo>
            <Codigo>20</Codigo>
            <Codigo>30</Codigo>
            <Codigo>40</Codigo>
        </Exemplares>
    </Livro>
</Biblioteca>
Ele seria facilmente lido com o módulo XPath da seguinte forma:
#!/usr/bin/perl

use XML::XPath;

my $inputFile = shift;

die("Faltou passar o nome do arquivo!") unless defined($inputFile);

my $xpath = XML:: XPath->new(filename => $inputFile);
my $nodeset = $xpath->find('//Biblioteca/Livro');

foreach my $context ($nodeset->get_nodelist) {
    my $isbn = $xpath->findvalue('@ISBN', $context);
    print "ISBN: $isbn\n";
    my $ano = $xpath->findvalue('@Ano', $context);
    print "Ano de Publicação: $ano\n";
    my $paginas = $xpath->findvalue('Paginas', $context);
    print "Quantidade de Páginas: $paginas\n";
    my $titulo = $xpath->findvalue('Titulo', $context);
    print "Título: $titulo\n";
    my $exemplares = $xpath->find('Exemplares/Codigo', $context);
    print "Exemplares disponíveis:\n";
    foreach my $newcontext ($exemplares->get_nodelist){
        my $codigo = $xpath->findvalue('.', $newcontext);
        print "\tCódigo: $codigo\n";
    }
}

Exemplo e código retirado de: http://perlbrasil.blogspot.com/2011/03/len...-com-xpath.html

Abraços.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      652k
×
×
  • Criar Novo...