[XSLT] Datum filter

Pagina: 1
Acties:

  • kaasgehakt
  • Registratie: September 2009
  • Laatst online: 07-08-2021
Beste mensen,

Ik heb op google gezocht en hier op tweakers maar ik kom er echt niet uit.

Ik wil graag dat mijn XSLT de 3 nieuwste datums uit mijn xml laat zien.
Nu heb ik hem al zover dat er in iedergeval in de goed volgorde wordt gezet.
Maar de filter met het aantal krijg ik niet voor elkaar.
Hebben jullie enig idee, hieronder mijn code.

<code>
<xsl:for-each select="NIEUWSLIST/ITEM">
<xsl:sort select="substring(@itemDate,6,4)" order="descending"/>
<!-- year sort -->
<xsl:sort select="substring(@itemDate,3,2)" order="descending"/>
<!-- day sort -->
<xsl:sort select="substring(@itemDate,1,2)" order="descending"/>
<!-- month sort -->
<h3>
<xsl:value-of select="TITEL"/>
</h3>
<p>
<xsl:value-of select="AFKORTING"/><br/>
<a>
<xsl:attribute name="href">
<xsl:value-of select="LINK/@VALUE"/>
</xsl:attribute>
<xsl:value-of select="LINK"/>
</a>
</p>
</xsl:for-each>
</code>
Alvast bedankt voor de hulp.

p.s wist niet wat code tags zijn

  • JefSnare
  • Registratie: Augustus 2007
  • Laatst online: 09-11-2020
code:
1
[code][/code]

Twitter Flickr


  • pedorus
  • Registratie: Januari 2008
  • Niet online
kaasgehakt schreef op donderdag 19 november 2009 @ 12:45:
XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<xsl:for-each select="NIEUWSLIST/ITEM">
    <xsl:sort select="substring(@itemDate,6,4)" order="descending"/>
<!-- year sort -->
<xsl:sort select="substring(@itemDate,3,2)" order="descending"/>
<!-- day sort -->
<xsl:sort select="substring(@itemDate,1,2)" order="descending"/>
<!-- month sort -->
<h3>
<xsl:value-of select="TITEL"/>
</h3>
<p>
<xsl:value-of select="AFKORTING"/><br/>
    <a> 
<xsl:attribute name="href">
<xsl:value-of select="LINK/@VALUE"/>
</xsl:attribute>
<xsl:value-of select="LINK"/>
    </a>
    </p>
</xsl:for-each>
offtopic:
Zie view voor de code-tags, of kijk hierboven bij Faqs>UBB tags

Het lijkt me dat de input-xml niet echt mooi is, en dat je dat beter kan aanpassen aan ISO-formaat. Op zich valt het nog mee, er zijn ingewikeldere situaties. Ik denk dat je hier gewoon met 1 sort-tag kan volstaan.
Verder: waarom zou een simpele xsl:if op position() niet werken (zie link)?

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • tonyisgaaf
  • Registratie: November 2000
  • Niet online
Als ik het goed begrijp is je datumformaat in je bronbestand MMDD?YYYY.
XSLT verwacht iets van het formaat 'YYYY-MM-DD'. Dus iets in de zin van:
XML:
1
<xsl:sort select="dateTime(string-join((substring(@itemDate, 6, 4), substring(@itemDate, 1, 2), substring(@itemDate, 3, 2)), '-'), '00:00')" order="descending" />

...zou moeten werken.
Verder even een opmerking over de comments in je code: het is "conventie" deze vóór de gerelateerde code te plaatsen, niet erna. Nogal verwarrend... Om nog maar te zwijgen over het ontbreken van inspringen en correcte code tags.

Edit: ow oeps, je had ze al in de goede volgorde. Dan is een simpele position() check idd voldoende.

[ Voor 8% gewijzigd door tonyisgaaf op 20-11-2009 10:48 ]

NL Weerradar widget Euro Stocks widget Brandstofprijzen widget voor 's Dashboard


Acties:
  • 0 Henk 'm!

  • kaasgehakt
  • Registratie: September 2009
  • Laatst online: 07-08-2021
Bedankt voor alle suggesties.
Ik heb het inmiddels al opgelost met een simpele position check.
Dus nogmaals bedankt