[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

RE: [xsl] Error recovery from casting in XSLT 2.0


Subject: RE: [xsl] Error recovery from casting in XSLT 2.0
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Tue, 19 Jun 2007 12:08:50 +0100

There's a function error() that you can use for this purpose.

Michael Kay
http://www.saxonica.com 

> -----Original Message-----
> From: Fraser Crichton [mailto:fc@xxxxxxxxxxxxxxxxxxxx] 
> Sent: 19 June 2007 11:47
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Error recovery from casting in XSLT 2.0
> 
> Hi, there,
> 
> I'm new to XSLT 2.0 and have a question about recovering from 
> casting errors, say for instance I'm trying to cast to a 
> date, I'd do something like -
> 
>    <xsl:function name="f:castToDate" as="xs:date">
>         <xsl:param name="date-string" as="xs:string"  />
>                       
>         <xsl:sequence select="if ($date-string castable as xs:date)
>         then xs:date($date-string)
>         else if ($date-string castable as xs:dateTime)
>         then xs:date(substring-before($date-string,'T'))
>         else()" />
>     </xsl:function>   
> 
> What I'm wondering is how do I raise some kind of error in the final
> else() if the function gets passed something it can't cast? e.g.
> 
>    <xsl:function name="f:castToDate" as="xs:date">
>         <xsl:param name="date-string" as="xs:string"  />
>                       
>         <xsl:sequence select="if ($date-string castable as xs:date)
>         then xs:date($date-string)
>         else if ($date-string castable as xs:dateTime)
>         then xs:date(substring-before($date-string,'T'))
>         else("NASTY ERROR CAN'T BE RETURNED BECAUSE I'M A DATE")" />
>     </xsl:function>   
> 
> Or do I have to write another wrapper function? I'm only a 
> few hundred pages into the first of Mr Kay's books so forgive 
> me if this is a bit basic.
> 
> Cheers,
> 
> Fraser


Current Thread
Keywords