从XPath查询按日期订购Xml项目

时间:2012-05-29 09:01:57

标签: xml perl xpath max

我正在编写一些通过XPath查询从Xml文件读取的perl脚本。 从Perl脚本中,我需要返回最近日期的3部电影(类似于按日期订购电影)。

xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="films.xsl"?>
<collection xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://...." xs:schemaLocation="http://.. films.xsd">

<film id="1">
    <title>Title1</title>
    <date>2011-09-24</date>
    <family>Action</family>
</film>
<film id="4">
    <title>Title2</title>
    <date>1980-09-24</date>
    <family>Thriller</family>
</film>

</collection>

我该怎么办?我阅读并尝试了更多解决方案,但任何事情。

我试试

my $nodeset = $xp->findnodes(
"/collection/film[not(\@id < preceding-sibling::collection/film[\@id] ) and not(\@id < following-sibling::collection/film[\@id])]" );

我尝试XPath 2.0的max函数只返回最近的, 我尝试xsl

<xsl:for-each select="collection/film/date">
<xsl:sort select="." data-type="date" order="descending"/>
<xsl:value-of select="title"/>
</xsl:for-each>

1 个答案:

答案 0 :(得分:0)

使用XML::XSH2找到最新电影:

#!/usr/bin/perl
use warnings;
use strict;

use XML::XSH2;

xsh << 'end;';
    open films.xml ;
    register-namespace xs http://.... ;
    $films := hash xs:date /xs:collection/xs:film ;
    $latest = { ( sort { $films->{$a} cmp $films->{$b} }
                     keys %$films )[0] } ;
    ls xsh:lookup('films', $latest) ;
end;