xsl-list
[Top] [All Lists]

Re: [xsl] Conditional String Substitution

2008-04-25 21:15:47

On Apr 25, 2008, at 11:46 AM, Dimitre Novatchev wrote:

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


I picked the first parameter of the concat apart and I understand how it works.


When I try to isolate the second parameter:


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


My transformer won't parse it. Oddly, it works fine when imbedded in your example.

Can you explain how it works?



Thanks,


N







--
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(_at_)coas(_dot_)oregonstate(_dot_)edu> 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



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


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

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