我使用LibXML解析XML文件,并需要按日期对条目进行排序。每个条目都有两个日期字段,一个用于发布条目,另一个用于更新时间。如何使用LibXML和Perl对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'))) {
...
}
不过,我需要逆向排序按日期公布的文件,而不是按日期进行更新。我怎样才能做到这一点?时间戳也看起来有点won。。我需要首先对其进行标准化吗?
谢谢!
更新: 在摆弄XPath命名空间和失败之后,我做了一个函数,它解析XML并将所需的值存储在一个哈希中。然后,我用一个光秃秃的sort
对散列进行排序,现在工作得很好。
很高兴看到你去了XML :: LibXML路线。要习惯XML的严格性有点困难,但从长远来看,它将为您节省大量时间。 (我不得不与那些在实现XML时使用捷径的供应商合作,这意味着我实际上不能给他们XML,我不得不给他们一些标签汤,非常恼人。) – jrockway 2009-06-14 12:49:55