使用sax的perl解析
我想用Perl编写一个xml解析脚本,使用模块从以下xml文件打印所有使用sax的perl解析,perl,Perl,我想用Perl编写一个xml解析脚本,使用模块从以下xml文件打印所有firstname值 约翰 雌鹿 游戏打得好 操作 100 拉里 页 45 账户 200 骚扰 陶工 50 人力资源 300 有人能帮我看一下示例脚本吗? 我是Perl新手。您有什么理由坚持使用XML::Sax;如果没有,那么您可能可以在Perl中寻找其他一些XML解析器(XML::Twig、XML::LibXML、XML::LibXMLReader、XML::Simple)等等 下面是使用XML::Twig检索名字的示例
firstname
值
约翰
雌鹿
游戏打得好
操作
100
拉里
页
45
账户
200
骚扰
陶工
50
人力资源
300
有人能帮我看一下示例脚本吗?我是Perl新手。您有什么理由坚持使用XML::Sax;如果没有,那么您可能可以在Perl中寻找其他一些XML解析器(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');
下面是一个使用
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
上。我尝试过这个方法,但不知道如何打印节点值。使用XML::SAX::ParserFactory;使用XML::SAX::Writer;my$writer=XML::SAX::writer->new;我的$parser=XML::SAX::ParserFactory->parser(Handler=>$writer);eval{$parser->parse_文件('sample.xml')};如果$@,则die“无法解析Lizzie的股票文件:$@”;嗨,谢谢你的回复。我还有一个问题。如何在SAX中处理重复的元素名?下面是我的xml文件。John gg Operations 100 xyz Larry Page 45 Accounts 200 abc我的问题是如何访问元素employee->employee->company->name?我问这个问题的原因是因为在employees->employees->name中还有一个“name”元素,我想跳过它。请帮忙。谢谢。