Re: [xsl] Conditional String Substitution

Subject: Re: [xsl] Conditional String Substitution
From: "Dimitre Novatchev" <dnovatchev@xxxxxxxxx>
Date: Fri, 25 Apr 2008 11:46:35 -0700
> 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...

This can be accomplished with a single XPath 1.0 expression:

concat(substring(@x,
	         1,
	         string-length(@x)
	          -4
	         *
	          (substring(@x, string-length(@x)-3) = '.xml')
	        ),

                substring('.html',
                           1
                         div
                          (substring(@x, string-length(@x)-3) = '.xml')
                         )
       )






-- 
Cheers,
Dimitre Novatchev
---------------------------------------
Truly great madness cannot be achieved without significant intelligence.
---------------------------------------
To invent, you need a good imagination and a pile of junk
-------------------------------------
Never fight an inanimate object
-------------------------------------
You've achieved success in your field when you don't know whether what
you're doing is work or play



On Fri, Apr 25, 2008 at 10:22 AM, Nathan Potter
<ndp@xxxxxxxxxxxxxxxxxxxx> wrote:
>
>
> 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