人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Perlを用いて、XMLファイルの中のキーワードの個数を数えるプログラムを組もうと思っています。
次のようなXMLの中の<keyword>のタグに囲まれた文字列を数えるプログラムです。

<?xml version="1.0" encoding="UTF-8"?>
<grant_award_list>
<grant_award id="1001">
<title>タイトル1</title>
<keywords><keyword>A</keyword><keyword>B</keyword></keywords>
</grant_award>
<grant_award id="1002">
<title>タイトル2</title>
<keywords><keyword>B</keyword></keywords>
</grant_award>
</grant_award_list>

このようなときに、次のようにキーワードとその出現回数が記載されたXMLファイルにしたいと考えています。

<?xml version="1.0" encoding="UTF-8"?>
<keywords>
<keyword>A</keyword>
<count>1</count>
</keywords>
<keywords>
<keyword>B</keyword>
<count>2</count>
</keywords>

具体的なプログラムのコードを教えてください。よろしくお願いします。

●質問者: riyoooh
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:Perl XML キーワード コード タイトル
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● Committeeman
●60ポイント ベストアンサー
# 読取
use XML::Simple;
my $readXML = XML::Simple -> new -> XMLin('input.xml', ForceArray=>['keyword']);
# 抽出
my @data;
foreach my $key (keys %{$readXML->{'grant_award'}}) {
 $ref = $$readXML{'grant_award'}{$key}{'keywords'};
 foreach $values (@$ref{'keyword'}) {
 push(@data, @$values);
 }
}
# 検数
my %count;
foreach (@data) {
 $count{$_}++;
}
# 出力
open(OUT, ">output.xml");
print OUT '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
while(($key, $value) = each(%count)) {
 print OUT '<keywords>' . "\n";
 print OUT '<keyword>' . $key . '</keyword>' . "\n";
 print OUT '<count>' . $value . '</count>' . "\n";
 print OUT '</keywords>' . "\n";
}
close(OUT);

出力で改行コードをつけるかどうかは好みで・・・

◎質問者からの返答

ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ