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

perlのソートの方法について質問です。

XMLにおいて、<count>タグ内の値の大きい順に並び替えたいと考えています。

<?xml version="1.0" encoding="UTF-8"?>
<keywords>
<keyword>赤</keyword>
<count>2</count>
</keywords>
<keywords>
<keyword>黄</keyword>
<count>1</count>
</keywords>
<keywords>
<keyword>青</keyword>
<count>3</count>
</keywords>

-----結果---------
<?xml version="1.0" encoding="UTF-8"?>
<keywords>
<keyword>青</keyword>
<count>3</count>
</keywords>
<keywords>
<keyword>赤</keyword>
<count>2</count>
</keywords>
<keywords>
<keyword>黄</keyword>
<count>1</count>
</keywords>


よろしくお願いします。

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

▽最新の回答へ

1 ● koriki-kozou
●70ポイント ベストアンサー
use XML::Simple;
my $readXML = XML::Simple -> new -> XMLin('input.xml', ForceArray=>['keyword','count']);
@{$readXML->{'keywords'}} = sort { $b->{count}[0] cmp $a->{count}[0] } @{$readXML->{'keywords'}};
print XMLout($readXML);

元データには下記のようにルート要素(仮にrootと名づけた)が存在しなければ正しく認識してくれないので注意

<?xml version="1.0" encoding="UTF-8"?>
<root>
<keywords>
<keyword></keyword>
<count>2</count>
</keywords>
<keywords>
<keyword></keyword>
<count>1</count>
</keywords>
<keywords>
<keyword></keyword>
<count>3</count>
</keywords>
</root>
◎質問者からの返答

ありがとうございます。

上記XMLデータを適用してみたところ、

「not well-formed (invalid token) at line 4, column 9, byte 66 at C:/usr/local/lib/XML/Parser.pm line 187」

というエラーが発生してしまいました。

パーサー中にエラーがあるということなのでしょうか。


2 ● edWard
●20ポイント

> パーサー中にエラーがあるということなのでしょうか。

XMLファイルをUTF-8で保存しましたか?

◎質問者からの返答

はい。

UTF-8で保存していますが、同じエラーになります。


3 ● wwwww1
●0ポイント

赤 黄色 青


4 ● wwwww1
●0ポイント

どうゆう事?

関連質問


●質問をもっと探す●



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