我使用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