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:39:48 +0100
Sorry, but you asked for an XQuery solution and I gave you one, then you
asked for an XSLT translation and I gave you one. If you want to do it the
hard way in XSLT 1.0 you're going to have to do it yourself.

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

> -----Original Message-----
> From: Ahsan Ali [mailto:doubleletter@xxxxxxxxx] 
> Sent: 31 May 2005 08:12
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: Re: [xsl] Q - Parsing & Manipulating Strings from XSL
> 
> What do you suggest for this then ?? Is there a way around in 1.0 ? I
> don't mind if its complicated.. I must do it somehow...
> 
> Thanks,
> 
> Ahsan
> 
> On 5/31/05, Michael Kay <mike@xxxxxxxxxxxx> wrote:
> > 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