[XML] Datum verschil in XSLT

Pagina: 1
Acties:
  • 134 views sinds 30-01-2008
  • Reageer

  • Redshark
  • Registratie: Mei 2002
  • Laatst online: 21-05 17:48
Ik heb hier een XML-bestand waar onder andere twee verschillende data in voorkomen. Met behulp van XSLT lees ik dit bestand uit en dat gaat prima. Nu wil ik graag het verschil in dagen kunnen uitrekenen tussen de twee data en ik heb geen idee hoe ik dat voor elkaar moet krijgen in XSLT.

Dus gewoon datum2 - datum1 = aantal dagen verschil.

Hierbij is het ook nog eens zo dat de datum een onderdeel vormt van de gehele datum+tijd, in dit formaat: 2004-06-04T12:47:10.000+02:00. Om hier enkel de datum uit te krijgen gebruik ik:

code:
1
<xsl:value-of select="substring(datechanged,1,10)"/>


Dit werkt perfect, maar ik heb het idee dat als ik dit ga gebruiken om het verschil in dagen uit te rekenen, dat er wat meer om de hoek komt kijken.

Een zoektocht leverde mij dit linkje op. Hier wordt er ook gerekend met data en verschillen hierin, maar het is mij niet duidelijk wat daar nu precies gebeurd.

Voor de volledigheid nog een stukje van mijn XML-bestand:

XML:
1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="ISO-8859-1" ?> 
<cms>
    <page pageid="201483">
        <mainpage>
            <datecreated>2004-06-04T12:47:10.000+02:00</datecreated> 
            <datechanged>2004-06-07T14:12:01.000+02:00</datechanged> 
        </mainpage>
    </page>
</cms>


Ik wil dus datecreated van datechanged aftrekken. Kan dit in XSLT en hoe doe ik dit dan?

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 24-05 14:53

NMe

Quia Ego Sic Dico.

U vraagt, wij draaien: http://p2p.wrox.com/archive/xslt/2002-01/74.asp

Dit zou je op weg moeten helpen volgens mij. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
EXSLT is je vriend, want dit wil je absoluut niet zelf gaan implementeren.

Sommige XSLT processors ondersteunen de date en time functies. Als jouw processor die niet ondersteunt, kan je de template varianten gebruiken.

Het gaat om de difference functie:
http://exslt.org/date/functions/difference/index.html

Voor een algemene howto van EXSLT:
http://exslt.org/howto.html

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Redshark
  • Registratie: Mei 2002
  • Laatst online: 21-05 17:48
Dat ziet er erg fijn uit moet ik zeggen. Even kijken of ik het goed begrijp, want op dit moment krij gik nog wat fouten.

Met <xsl:call-template> kan ik dus template importeren waarbij ik de data opgeef met <xsl:with-param>:

code:
1
2
3
4
<xsl:call-template name="date:difference">
    <xsl:with-param name="start" select="cms/page/mainpage/datecreated" />
    <xsl:with-param name="end" select="cms/page/mainpage/datechanged" />
</xsl:call-template>


In de declaratie van het xsl-bestand moet ik dan aangeven waar de template te vinden is met iets als:

code:
1
2
3
4
5
<xsl:stylesheet version="1.0"
          xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
          xmlns:math="http://exslt.org/dates-and-times"
          extension-element-prefixes="date:difference">
<xsl:import href="date.difference.function.xsl" />


maar deze varianten zijn er ook:

code:
1
2
<func:script language="exslt:javascript" implements-prefix="date" src="date.js"/>
<func:script language="exslt:msxsl" implements-prefix="date" src="date.msxsl.xsl"/>


Ik krijg nu de foutmelding: 'date:difference' is not a valid namespace prefix value.

Volgens mij haal ik dingen door elkaar die ik lokaal uitvoer met mijn bestand en die ik op exslt.org wil laten gebeuren. Of zit ik helemaal op het verkeerde spoor?

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Betekent die foutmelding niet gewoon dat je geen ':' in je prefix mag hebben?

Zou die prefix misschien gewoon 'date' moeten zijn?

  • Redshark
  • Registratie: Mei 2002
  • Laatst online: 21-05 17:48
Dat betekend het inderdaad denk ik. Ondertussen ben ik zover dat ik dingen te zien krijg volgens een foutmelding die ik al gespot had op http://exslt.org/.

Ik heb nu gewoon de XSL-template geplakt in mijn xsl en dat lijkt te werken.

Edit: Werkt als een zonnetje! Allen bedankt voor dit stukje steuning want hier ben ik wel blij mee!

* Redshark is een tikkie trots op zichzelf :*)

[ Voor 24% gewijzigd door Redshark op 14-06-2004 17:10 ]

Pagina: 1