Re: [xsl] Conditional String Substitution

Subject: Re: [xsl] Conditional String Substitution
From: Nathan Potter <ndp@xxxxxxxxxxxxxxxxxxxx>
Date: Fri, 25 Apr 2008 10:30:12 -0700
On Apr 25, 2008, at 10:26 AM, Michael Kay wrote:


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')

Well that's handy...


I'll look into how tight my binding is to XSLT 1.0.

I am invoking the transformation inside of a java servlet using the JDOM package. I probably need to look at a different package to use for the transforms...

N





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


============================================================ 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