LibXMLを使用して XML ファイルを解析していて、エントリを日付順に並べ替える必要があります。各エントリには 2 つの日付フィールドがあり、1 つはエントリが公開された日付、もう 1 つは更新された日付です。
<?xml version="1.0" encoding="utf-8"?>
...
<entry>
<published>2009-04-10T18:51:04.696+02:00</published>
<updated>2009-05-30T14:48:27.853+03:00</updated>
<title>The title</title>
<content>The content goes here</content>
</entry>
...
XML ファイルは、更新日順に並べられており、最新のものを先頭にしています。これを簡単に逆にして、古いエントリを最初に配置できます。
my $parser = XML::LibXML->new();
my $doc = $parser->parse_file($file);
my $xc = XML::LibXML::XPathContext->new($doc->documentElement());
foreach my $entry (reverse($xc->findnodes('//entry'))) {
...
}
ただし、更新日ではなく、公開日でファイルを逆ソートする必要があります。どうやってやるの?タイムスタンプも少し不安定に見えます。最初にそれを正規化する必要がありますか?
ありがとう!
更新: XPath 名前空間をいじって失敗した後、XML を解析し、必要な値をハッシュに格納する関数を作成しました。次に、baresort
を使用してハッシュを並べ替えましたが、現在は問題なく機能しています。