xslt - xsl template with match that compares dates -
i have following xml
<list> <field name="d22" value="2005-05-03z" /> <element name="qx55"> <element name="qx553" value="2004-01-01z" /> </element> <element name="qx55"> <element name="qx553" value="2005-04-26z" /> </element> <element name="qx55"> <element name="qx553" value="2005-05-01z" /> </element> <element name="qx55"> <element name="qx553" value="2006-01-01z" /> </element> <element name="qx55"> <element name="qx553" value="2005-05-03z" /> </element> </list>
i trying create xslt mapping remove qx25 elements @value date before date in @value field d22
i applying filter using element:
<xsl:template match="">
i know xslt cannot compare dates suspect have done substring don't know how apply substring in match attribute. cannot use extensions xslt
this tried far: tried working comparing years far it's giving me parse exception
<xsl:variable name="d22date"> <xsl:value-of select="/list/field[@name='d22']/@value" /> </xsl:variable> <xsl:template match="//element[@name='qx55'][element[@name='qx553' , substring(@value,0,5)<substring($d22date,0,5)]]"/>
can me match attribute?
i using xslt 2.0
you not far off, there few things wrong current attempt:
<
needs escaped<
in expression- indexing of characters in
substring
starts @ 1, not 0. - the length of date string want 10, not 5
this means template should this:
<xsl:template match="element [@name='qx55'] [element[@name='qx553' , substring(@value, 1, 10) < substring($d22date, 1, 10)]]"/>
note not true xslt can't compare dates. xslt 2.0 have many date/time functions. example, write xslt this
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/xsl/transform" version="2.0" xmlns:xs="http://www.w3.org/2001/xmlschema"> <xsl:output method="xml" indent="yes" /> <xsl:variable name="d22date" select="/list/field[@name='d22']/@value" as="xs:date" /> <xsl:template match="element[@name='qx55'][element[@name='qx553' , xs:date(@value) < $d22date]]"/> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> </xsl:stylesheet>
Comments
Post a Comment