【发布时间】:2009-06-13 12:09:25
【问题描述】:
我正在使用LibXML 解析一个 XML 文件,并且需要按日期对条目进行排序。每个条目有两个日期字段,一个用于条目发布时间,一个用于更新时间。
<?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 对哈希进行排序,现在效果很好。
【问题讨论】:
-
很高兴看到您选择了 XML::LibXML 路线。适应 XML 的严格性有点困难,但从长远来看,它会为您节省大量时间。 (我不得不与在实现 XML 方面走捷径的供应商合作,这意味着我实际上不能给他们 XML,我不得不给他们某种标签汤。非常烦人。)