Я разбираю XML-файл с помощью LibXML, и мне нужно отсортировать записи по дате. Каждая запись имеет два поля даты: одно для того, когда запись была опубликована, а другое - когда она была обновлена.
<?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 и сохраняла нужные мне значения в хэше. Затем я использовал чистый sort
для сортировки хэша, который теперь отлично работает.