1
我想修改一個我在線發現的使用XML :: Parser標識XML文檔的獨特元素以及每個元素髮生次數的Perl腳本。 Perl腳本及其文檔可以發現here:使用XML :: Parser包含父節點
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)
我的問題是我怎麼也包括在輸出中的父節點?
感謝您的答覆@mirod,這正是我一直在尋找。我對Perl非常陌生,請告訴我腳本中的哪些地方應該放置該行代碼?我不斷收到有關顯式包名稱的錯誤。 – ngwilliams
你可能有警告,因爲你沒有用'my $ name;'聲明'$ name'。我已經更新了我的答案,爲您提供處理程序的完整代碼。 – mirod
有沒有一種方法可以使用current_element獲取完整路徑?我現在意識到我也需要祖父節點。 – ngwilliams