2010-03-12 5 views
0

J'essaie de trier par date pour la sortie XML. Voici mon XSL:Trier par date dans XSL

<?xml version="1.0" encoding="UTF-8"?> 
<!-- Example by Phil 'iwonder' Guerra --> 
<!-- Edited by Lee Sykes DNN Creative Magazine http://www.dnncreative.com --> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

    <xsl:output method="html" indent="yes"/> 
    <xsl:param name="TITLE"/> 

    <xsl:template match="rss"> 

     <!-- Do not show channel image --> 
     <!-- Do not select the first item (this is useful if there are advertisements, such as using an RSS feed from moreover.com--> 
     <xsl:for-each select="channel/item[position() &gt; 0]"> 

      <!-- Test to limit number of items displayed. Here only 5 items will be transformed --> 
      <xsl:if test="position() &lt; 5"> 

       <br></br> 
       <!-- to open links in a new window, change target="_main" to target="_blank" --> 
       <strong><a href="{link}" target="_blank"><xsl:value-of select="title"/></a></strong> 
       <br> 
        <!-- <xsl:value-of select="pubDate"/> --> 
       </br> 
       <!-- only display 100 characters of the description, and allow html --> 
       <xsl:value-of disable-output-escaping="yes" select="description"/> 

      </xsl:if> 
     </xsl:for-each> 

    </xsl:template> 

    <xsl:template match="description"> 
     <br> 
      <xsl:value-of select="."/> 
     </br> 
    </xsl:template> 

    <xsl:template name="strip-tags"> 
     <xsl:param name="text"/> 
     <xsl:choose> 
      <xsl:when test="contains($text, '&lt;')"> 
       <xsl:value-of select="substring-before($text, '&lt;')" /> 
       <xsl:call-template name="strip-tags"> 
        <xsl:with-param name="text" select="substring-after($text, '&gt;')"/> 
       </xsl:call-template> 
      </xsl:when> 
      <xsl:otherwise> 
       <xsl:value-of select="substring($text, 1, 100)" /> 
      </xsl:otherwise> 
     </xsl:choose> 
    </xsl:template> 

</xsl:stylesheet> 

Je suis en train de trier par ordre décroissant en utilisant le entereddate dans mon XML:

<item> 
    <title>Media Director</title> 
    <entereddate>4/2/2009</entereddate> 
    <referencenumber>01646359</referencenumber> 
    <description><![CDATA[Leading Cleveland-based Award-Winning Integrated Marketing Communications firm seeks a passionate Media Director to lead a team of media planning and buying professionals and Fortune 500 clients. This individual will be responsible to develop strategic and innovative traditional and nontraditional consumer engagement solutions including emerging media. This leader will play a large role in new business. Ten years experience in media planning and buying as well as five years of management required. The environment is collaborative with many creative perks.]]></description> 
    <city>Cleveland</city> 
    <state>OH</state> 
    <country>United States of America</country> 
    <salary>$0.00 - $0.00/$0.00/hr - $0.00/hr</salary> 
    <guid isPermaLink="false">http://employment.topechelon.com/web77391/jobseeker/sSetup.asp?runsearch=1&amp;spJobAdId=01646359</guid> 
    <link>http://employment.topechelon.com/web77391/jobseeker/sSetup.asp?runsearch=1&amp;spJobAdId=01646359</link> 
</item> 

Toute aide serait appréciée!
Merci

+0

Dans quel format se trouve cette date? - C'est à dire. Est-ce le 4 février 2009 ou le 2 avril 2009? –

+0

4/2/2009 - Merci – bethhilson

+0

Le 4 février alors? –

Répondre

0

XSLT peut aider avec le tri, mais n'est pas bon avec les dates. AFAIK, la façon la plus simple de résoudre ceci est de générer une chaîne avec `CCYYMMDD '(Century, Year, Month, Day) à partir du champ de date que vous avez et de l'utiliser pour trier par ordre alphabétique lors de la sélection. Utilisez le texte «tel quel» lors de la sortie.

combinaison de < xsl: sort ...> et substring (datefield, xx, 2) + ... substring

Hope this helps,

1

Dates dans les documents XML doit toujours être au format AAAA -MM-DD. C'est le format que le type de données XML Schema date utilise, et il s'agit d'un format qui peut être facilement trié par XSLT et manipulé à l'aide des fonctions de chaîne limitées de XSLT.

1

Si les dates sont toujours dans un format normal (par exemple, mm/jj/aaaa), vous pouvez utiliser 3 clés de tri.

<xsl:for-each select="channel/item[position() &gt; 0]"> 
    <xsl:sort select="substring-after(substring-after(entereddate,'/'),'/')" data-type="number" /> <!-- year --> 
    <xsl:sort select="substring-before(entereddate,'/')" data-type="number" /> <!-- month --> 
    <xsl:sort select="substring-before(substring-after(entereddate,'/'),'/')" data-type="number" /> <!-- day --> 

</xsl:for-each> 

Toutefois, si les dates peuvent être dans d'autres formats tels que « 13 mars, 2010 », vous aurez besoin pour analyser et convertir les dates dans un format sortable (aaaammjj).

Exslt a des fonctions d'extension pour manipuler les dates. Les commentaires dans votre feuille de style suggèrent que vous utilisez .NET, exslt est disponible pour .NET à partir du projet MvpXml.