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>
よろしくお願いします。
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>
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」
というエラーが発生してしまいました。
パーサー中にエラーがあるということなのでしょうか。
> パーサー中にエラーがあるということなのでしょうか。
XMLファイルをUTF-8で保存しましたか?
はい。
UTF-8で保存していますが、同じエラーになります。
ありがとうございます。
上記XMLデータを適用してみたところ、
「not well-formed (invalid token) at line 4, column 9, byte 66 at C:/usr/local/lib/XML/Parser.pm line 187」
というエラーが発生してしまいました。
パーサー中にエラーがあるということなのでしょうか。