2012-05-29 2 views
-1

Я пишу некоторые скрипты perl, которые читаются из файла Xml через запрос XPath. Из сценариев Perl мне нужно вернуть 3 фильма с самой последней датой (как и по заказу по дате).Закажите элемент Xml по дате из запроса XPath

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 только вернет последнее, я стараюсь XSL

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

ответ

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; 
Смежные вопросы