RE: [xsl] Conditional String Substitution

Subject: RE: [xsl] 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: [xsl] 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

Current Thread