我正在尝试修改我在网上找到的 Perl 脚本,该脚本使用 XML::Parser 来识别 XML 文档的唯一元素以及每个元素出现的次数。Perl 脚本及其文档可以在这里找到:
use strict;
use warnings;
use XML::Parser;
use File::Find;
@ARGV or die "usage: xmlelements DIR [DIR ...]\n";
my %element_count;
my $parser = XML::Parser->new(
Handlers => {
Start => \&start_element,
},
);
find \&process_xml, @ARGV;
print "$_ ($element_count{ $_ })\n"
for sort keys %element_count;
exit;
sub process_xml {
$parser->parsefile( $_ )
if substr( $_, -4 ) eq '.xml' and -f;
}
sub start_element {
my ( $expat, $element, @attrval ) = @_;
$element_count{ $element }++;
}
这会生成如下输出:
Account (15614)
Account_No (15504)
Active (15614)
Activity (6658)
Address (28098)
Address_1 (27548)
Address_2 (2033)
Address_3 (62)
Address_City (15)
我的问题是如何在输出中包含父节点?