RE: [xsl] Q - Parsing & Manipulating Strings from XSL

Subject: RE: [xsl] Q - Parsing & Manipulating Strings from XSL
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Tue, 31 May 2005 08:00:02 +0100
These functions are present in XQuery 1.0 and in XSLT 2.0, but not in XSLT
1.0.

Michael Kay
http://www.saxonica.com/ 


> -----Original Message-----
> From: Ahsan Ali [mailto:doubleletter@xxxxxxxxx] 
> Sent: 31 May 2005 07:29
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re: [xsl] Q - Parsing & Manipulating Strings from XSL
> 
> Allright. I converted the xquery code to the below xsl code:
> 
> 	<xsl:template match="JrnyTm">
> 		<xsl:variable name="onemin" select=" 
> xdt:dayTimeDuration('PT1M')"/>
> 		<xsl:variable name="time" select="xs:integer(.) 
> * $onemin"/>
> 		<xsl:variable name="hours" 
> select="xs:hours-from-duration($time)"/>
> 		<xsl:variable name="mins" 
> select="xs:minutes-from-duration($time)"/>
> 		<xsl:value-of select="concat($hours, ' hrs', 
> $mins, ' mins')"/>
> 	</xsl:template>
> 
> Now the problem is that the xdt namespace is not recognised !
> 
> The namespace definition is:
> xmlns:xs="http://www.w3.org/2001/XMLSchema";
> xmlns:xdt="http://www.w3.org/2005/04/xpath-datatype";
> 
> I get an error:"Namespace 'http://www.w3.org/2005/04/xpath-datatype'
> does not contain any functions."
> 
> I'm using the MSXML XSL processor...
> 
> 
> Regards, Ahsan
> 
> On 5/30/05, Michael Kay <mike@xxxxxxxxxxxx> wrote:
> > 
> > > Is there way to do this in pure XSLT instead of Xquery ??
> > 
> > Of course. Just replace
> > 
> >    let $x := EXPR
> > 
> > and
> > 
> >    declare variable $x := EXPR
> > 
> > by
> > 
> >    <xsl:variable name="x" select="EXPR"/>
> > 
> > and replace
> > 
> >    "return X" by
> > 
> >    <xsl:value-of select="X"/>
> > 
> > Michael Kay
> > http://www.saxonica.com/
> > 
> > >
> > > > You've got a choice between using numeric arithmetic or
> > > duration arithmetic.
> > > > It's probably cleanest to use duration arithmetic though
> > > it's a bit verbose.
> > > >
> > > > declare variable $one-minute := xdt:dayTimeDuration('PT1M')
> > > >
> > > > then
> > > >
> > > > let $time := xs:integer(JrnyTm) * $one-minute,
> > > >     $hours := hours-from-duration($time),
> > > >     $minutes := minutes-from-duration($time)
> > > > return
> > > >     concat($hours, ' hrs ', $minutes, ' minutes ')
> > > >
> > >
> > > Regards, Ahsan

Current Thread