Разбор Perl с помощью sax - PullRequest
2 голосов
/ 05 января 2012

Я хотел бы написать скрипт синтаксического анализа xml на Perl, который печатает все значения firstname из следующего XML-файла, используя модуль XML :: SAX .Кто-нибудь помочь мне с примером сценария?
Я новичок в Perl.

Ответы [ 2 ]

3 голосов
/ 05 января 2012

Вот пример использования XML::SAX.Я использовал XML::SAX::PurePerl.

#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
use XML::SAX::ParserFactory;
use XML::SAX::PurePerl;

my $characters;
my @firstnames;

my $factory = new XML::SAX::ParserFactory;
#Let's see which handlers we have available
#print Dumper $factory;
my $handler = new XML::SAX::PurePerl;
my $parser = $factory->parser(
              Handler => $handler,
              Methods => {
                  characters => sub {
                      $characters = shift->{Data};
                  },
                  end_element => sub {
                      push @firstnames, $characters if shift->{LocalName} eq 'firstname';
                  }
              }
          );

$parser->parse_uri("sample.xml");
print Dumper \@firstnames;

Вывод:

$VAR1 = [
          'John',
          'Larry',
          'Harry'
        ];

Я использую $characters для хранения символьных данных и помещаю их содержимое в @firstnames всякий раз, когда вижузакрывающий тэг имени

1 голос
/ 05 января 2012

Есть ли у вас основания придерживаться XML :: Sax;Если нет, то, вероятно, вы можете найти другие парсеры XML в Perl (XML :: Twig, XML :: LibXML, XML :: LibXMLReader, XML :: Simple) и многие другие.

Вот пример кода для получения имени с использованием XML :: Twig.

use XML::Twig;

my $twig = XML::Twig->new ();
$twig->parsefile ('sample.xml');

my @firstname = map { $_->text } $twig->findnodes ('//firstname');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...