Pergunta

O único exemplo de código que eu encontrei até agora é tão antiga que não funciona mais (usos obsoleto classes). Todos necessidade I é algo básico que demonstra:

  1. Carregamento e analisar o XML de um arquivo

  2. A definição do manipulador de eventos SAX (s)

  3. A leitura dos atributos ou valores de texto do elemento passado para o manipulador de eventos

Foi útil?

Solução

Como sobre a própria distribuição ?

Vá para XML :: LibXML página de distribuição e clique browse .

Observe o seguinte cautela na documentação :

No XML momento :: LibXML fornece apenas uma interface incompleta para a implementação SAX nativo do libxml2. A implementação atual não é testado em ambiente de produção. Pode causar problemas de memória significativos ou programas de comportamento errado.

Há também XML :: SAX que vem com agradável documentação . Eu usei-o algumas vezes e funcionou bem para os meus propósitos.

Outras dicas

A sugestão de Sinan era bom, mas não ligar todos os pontos. Aqui está uma forma muito simples programa que eu remendada:

arquivo 1: Os manipuladores (MySAXHandler.pm)

  package MySAXHandler;
  use base qw(XML::SAX::Base);

  sub start_document {
    my ($self, $doc) = @_;
    # process document start event
  }

  sub start_element {
    my ($self, $el) = @_;
    # process element start event
    print "Element: " . $el->{LocalName} . "\n";
  }

1;

arquivo 2: O programa de teste (test.pl)

#!/usr/bin/perl

use strict;
use XML::SAX;
use MySAXHandler;

my $parser = XML::SAX::ParserFactory->parser(
        Handler => MySAXHandler->new
);

$parser->parse_uri("some-xml-file.xml");

Nota: Como obter os valores de um atributo do elemento. Este não foi descrito de uma maneira que eu poderia usar. Levei mais de uma hora para descobrir a sintaxe. Aqui está. No meu arquivo XML, o atributo foi ss: Index. A definição namespace para ss foi xmlns: ss = "urn: schemas-microsoft-com: office: spreadsheet". Assim, a fim de obter o atributo Índice bobo, eu precisava disso:

my $ssIndex = $el->{Attributes}{'{urn:schemas-microsoft-com:office:spreadsheet}Index'}{Value};

Isso foi doloroso.

XML :: LibXML :: Sax implementos a interface e Perl SAX existe um documento legal.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top