我是 Perl 语言的新手。我有一个类似的 XML,
<xml>
<date>
<date1>2012-10-22</date1>
<date2>2012-10-23</date2>
</date>
</xml>
我想解析这个 XML 文件并将其存储在数组中。如何使用 perl 脚本执行此操作?
我是 Perl 语言的新手。我有一个类似的 XML,
<xml>
<date>
<date1>2012-10-22</date1>
<date2>2012-10-23</date2>
</date>
</xml>
我想解析这个 XML 文件并将其存储在数组中。如何使用 perl 脚本执行此操作?
Use XML::Simple - Easy API to maintain XML (esp config files) or
see XML::Twig - A perl module for processing huge XML documents in tree mode.
像这样的例子:
use strict;
use warnings;
use XML::Simple;
use Data::Dumper;
my $xml = q~<xml>
<date>
<date1>2012-10-22</date1>
<date2>2012-10-23</date2>
</date>
</xml>~;
print $xml,$/;
my $data = XMLin($xml);
print Dumper( $data );
my @dates;
foreach my $attributes (keys %{$data->{date}}){
push(@dates, $data->{date}{$attributes})
}
print Dumper(\@dates);
输出:
$VAR1 = [
'2012-10-23',
'2012-10-22'
];
使用XML::XSH2,一个围绕XML::LibXML的包装器:
#!/usr/bin/perl
use warnings;
use strict;
use XML::XSH2;
xsh << '__XSH__';
open 2.xml ;
for $t in /xml/date/* {
my $s = string($t) ;
perl { push @l, $s }
}
__XSH__
no warnings qw(once);
print join(' ', @XML::XSH2::Map::l), ".\n";
#!/usr/bin/env perl
use strict;
use warnings;
use XML::LibXML;
my $doc = XML::LibXML->load_xml(location => 'data.xml');
my @nodes = $doc->findnodes('/xml/date/*');
my @dates = map { $_->textContent } @nodes;
如果您不能/不想使用任何 CPAN 模块:
my @hits= $xml=~/<date\d+>(.+?)<\/date\d+>/
这应该为您提供@hits
数组中的所有日期。
如果 XML 不像您的示例那么简单,建议使用 XML 解析器,这XML::Parser
就是其中之一。