xsl-list
[Top] [All Lists]

RE: [xsl] Conditional String Substitution

2008-04-25 10:27:16

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(_at_)coas(_dot_)oregonstate(_dot_)edu] 
Sent: 25 April 2008 18:23
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
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



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--

<Prev in Thread] Current Thread [Next in Thread>