Subject: RE: Conditional String Substitution
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Fri, 25 Apr 2008 18:26:49 +0100
|
Is there any particular reason you have to use XSLT 1.0? This kind of thing
is much easier in 2.0. It more-or-less reduces to
replace(@xlink:href, '\.xml$', '.html')
Michael Kay
http://www.saxonica.com/
> -----Original Message-----
> From: Nathan Potter [mailto:ndp@xxxxxxxxxxxxxxxxxxxx]
> Sent: 25 April 2008 18:23
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Cc: Nathan Potter
> Subject: Conditional String Substitution
>
>
>
> Greetings,
>
> I need to do some string manipulation of an attribute value
> using XSLT.
>
> I need to look at the value of the attribute "href" and
> determine if it ends in the suffix ".xml"
>
> If so then I need to replace the ".xml" suffix with a ".html" suffix.
>
> I got it to work using a pretty convoluted set of XPath
> expressions in conjunction with xsl:if but I think that I am
> missing something...
>
> Is there a more straight forward way of accomplishing this?
>
>
> Example(s):
>
> <xsl:template match="thredds:catalogRef">
>
> <xsl:variable name="href" select="./@xlink:href" />
> <xsl:variable name="linkSuffix" select="substring
> ($href,string-length($href) - 3)" />
> <xsl:variable name="linkBody" select="substring($href,
> 1,string-length($href) - 4)" />
>
> <xsl:if test="$linkSuffix='.xml'">
> <xsl:value-of select="$indent"/><a href="{concat
> ($linkBody,'.html')}" ><xsl:value-of select="./@xlink:title"/> /</a>
> </xsl:if>
>
> <xsl:if test="not($linkSuffix='.xml')">
> <xsl:value-of select="$indent"/><a href="{$href}"
> ><xsl:value-of select="./@xlink:title"/> /</a>
> </xsl:if>
>
> </xsl:template>
>
>
>
> I used a bunch of variables in the example simply to make it
> more readable, the example could be condensed to:
>
> <xsl:template match="thredds:catalogRef">
>
> <xsl:if test="substring(./@xlink:href,string-length(./
> @xlink:href) - 3)='.xml'">
> <a href="{concat(substring(./@xlink:href,1,string-length
> (./@xlink:href) - 4),'.html')}" ><xsl:value-of select="./
> @xlink:title"/> /</a>
> </xsl:if>
>
> <xsl:if test="not(substring(./@xlink:href,string-length(./
> @xlink:href) - 3))">
> <a href="{./@xlink:href}" ><xsl:value-of
> select="./ @xlink:title"/> /</a>
> </xsl:if>
> <br/>
>
> </xsl:template>
>
> Thanks!
>
> Nathan
>
>
>
>
>
>
> ============================================================
> Nathan Potter Oregon State University, COAS
> ndp at coas.oregonstate.edu 104 Ocean. Admin. Bldg.
> 541 737 2293 voice Corvallis, OR 97331-5503
> 541 737 2064 fax
|