我需要一個腳本來遞歸地瀏覽一個目錄,並按照最頻繁到最不頻繁的順序解析每個.xml
文件和列表標籤,並告訴每個標籤出現的次數爲了統計哪些是最常用的。解析.xml文件和列表標籤的腳本[求助]
我在想Perl,但如果你認爲有更好的方法,請讓我知道。
我能找到計數
sub by_count {
$count{$b} <=> $count{$a};
}
open(INPUT, "<[Content_Types].xml");
open(OUTPUT, ">output");
$bucket = "";
while(<INPUT>){
@words = split(/\s+/);
foreach $word (@words){
if($word=~/($bucket)/io){
print OUTPUT "$word\n";
$count{$1}++;}
}
}
foreach $word (sort by_count keys %count) {
print OUTPUT "$word occurs $count{$word} times\n";
}
close INPUT;
close OUTPUT;
但我有定義$桶變量麻煩文檔中的單詞一個Perl腳本,該腳本intendend定義像
$bucket = "monkey | tree | banana"
桶
,輸出會像
word monkey occurs 4 times
word monkey occurs 3 times
word monkey occurs 1 times
在我來說,我不得不使用通配符所以它會分析在<之間>一切都像
$bucket = <"<*"."*>">;
但是這會創建一個包含所有的XML代碼和計數每一個「<」和「>」添加toguether和輸出
occurs 50 times
我需要一個輸出文件一些執行以下操作:
例的.xml文件:
<tag1 This is tag1 />
<tag1 This is tag1 />
<tag2 This is tag2 />
<tag2 This is tag2 />
<tag1 This is tag1 />
<tag2 This is tag2 />
<tag3 This is tag3 />
輸出:
<tag1 This is tag1 /> appears 2 times
<tag2 This is tag2 /> appears 3 times
<tag3 This is tag3 /> appears 1 time
編輯:
解決:
#usr/bin/perl
sub by_count {
$count{$b} <=> $count{$a};
}
open(INPUT, "</file.xml"); #xml file
open(OUTPUT, ">outputfile"); #Create an output file
$bucket = qw/./;
while(<INPUT>){
@words = split(/\</); #Whenever reaches a '<' breaks the string
foreach $word (@words){
if($word=~/($bucket*>)/io){
#print OUTPUT "$word";
#print OUTPUT "\n\n";
$count{$1}++;}
}
}
foreach $word (sort by_count keys %count) {
print OUTPUT "<$word occurs $count{$word} times\n\n";
}
close INPUT;
close OUTPUT;
OUTPUT
<Default Extension="xlsx" ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"/> occurs 1 times
<Default Extension="png" ContentType="image/png"/> occurs 1 times
<Override PartName="/word/theme/theme1.xml" ContentType="application/vnd.openxmlformats-officedocument.theme+xml"/> occurs 1 times
謝謝大家的幫助,這是非常有益的,一到cfrenz因爲他把他的博客至極的代碼我editted
http://perlgems.blogspot.pt/2012/05/normal-0-false-false-false-en-us-x-none_2673.html
我d爲此使用Perl,但這主要是個人偏好,我不會爲您編寫整個程序。 CPAN上不缺少XML庫。你有什麼嘗試?你遇到了什麼問題? – Quentin
我實際上是perl的新手,我有點迷路。我仍然試圖找出這樣做的邏輯,只有這樣我才能夠在代碼中進行轉換。我已經做了一個按文件名列出並計數重複但我分配了什麼名字太尋找。在這裏我不知道有多少個不同的標籤我會找到,所以我需要找到一種方法來打印遇到的每個標籤,說'<' and a '/>'之間的所有內容,並打印它與該標籤 –
的發行版我正在考慮使用glob函數。你怎麼看? –