[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

RE: [xsl] Re: matching multiple times, outputting once?


Subject: RE: [xsl] Re: matching multiple times, outputting once?
From: "McKeever, Marty" <marty.mckeever@xxxxxxxxxxxxxxxxx>
Date: Tue, 06 Nov 2001 07:24:40 -0500

Dimitre,
I appreciate your help, and apologize if i was unclear.  Your solution
inverted the input/output markup.

This is my XML source:
<emphasis bold="Yes" italic="Yes" underline="Yes">Hello</emphasis>

and this is the desired result of the transformation:
<u><i><b>Hello</b></i></u>

Your template is very intriguing, and i will try to work out the inverted
procedure myself, but certainly welcome your help!

Thanks!
Marty


> -----Original Message-----
> From: Dimitre Novatchev [mailto:dnovatchev@xxxxxxxxx]
> Sent: Tuesday, November 06, 2001 12:43 AM
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: [xsl] Re: matching multiple times, outputting once?
> 
> 
> Here's the solution to your problem:
> 
> xml source document:
> -------------------
> <contents>
> <b>Hello</b>
> <i><b>Hello</b></i>
> <u><i><b>Hello</b></i></u>
> </contents>
> 
> 
> Stylesheet:
> ----------
> <xsl:stylesheet version="1.0" 
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> xmlns:trans="myTrans" exclude-result-prefixes="trans"
> >
> 
>   <xsl:output indent="yes" omit-xml-declaration="yes"/>
> 
>   <trans:trans>
>     <in>b</in>
>     <out>bold</out>
>     <in>i</in>
>     <out>italic</out>
>     <in>u</in>
>     <out>underline</out>
>   </trans:trans>
>   
>   <xsl:variable name="vTrans" select="document('')/*/trans:*"/>
>   
>   <xsl:template match="b | i | u">
>     <emphasis>
>       <xsl:apply-templates select="." mode="emph"/>
>     </emphasis>
>   </xsl:template>
>   
>   <xsl:template match="b | i | u" mode="emph">
>     <xsl:variable name="vEmphName" 
>                   select="$vTrans/in[. = name(current())]
>                                    /following-sibling::out[1]"/>
>       <xsl:attribute name="{$vEmphName}">yes</xsl:attribute> 
>       <xsl:apply-templates mode="emph"/>
>   </xsl:template>
>   
> </xsl:stylesheet>
> 
> 
> Result:
> ------
> <emphasis bold="yes">Hello</emphasis>
> <emphasis italic="yes" bold="yes">Hello</emphasis>
> <emphasis underline="yes" italic="yes" bold="yes">Hello</emphasis>
> 
> 
> Hope this helped.
> 
> Cheers,
> Dimitre Novatchev.
> 
> 
> "McKeever, Marty" <marty dot mckeever at bankofamerica dot com> wrote:
> 
> This is really bugging me, because i thought it would be 
> simple.  Maybe it
> is, and i'm just having a mental block -- thanks for your help.
> 
> Here are 3 possibilities that i have to match for, and 3 
> desired outputs:
> 
> <emphasis bold="Yes">Hello</emphasis>
> <emphasis bold="Yes" italic="Yes">Hello</emphasis>
> <emphasis bold="Yes" italic="Yes" underline="Yes">Hello</emphasis>
> 
> <b>Hello</b>
> <i><b>Hello</b></i>
> <u><i><b>Hello</b></i></u>
> 
> and every possible combination thereof.
> 
> 
> I have had no luck writing an intelligent template rule for 
> these -- the
> only way i've found so far is a deeply nested <xsl:choose> 
> which takes every
> possible combination into account.  This can't be the best 
> way to do this.
> 
> Everything else i've tried either matches only one rule, or 
> outputs "Hello"
> multiple times, one for each style.
> 
> There has to be an elegant solution i'm missing...
> 
> (and yes, i know i could easily write this out as <span
> style="font-style:bold,italic;text-decoration:underline">Hello
> </span>, but
> that's not what i'm looking for here.)
> 
> TIA!
> marty
> 
> 
> 
> 
> __________________________________________________
> Do You Yahoo!?
> Find a job, post your resume.
> http://careers.yahoo.com
> 
>  XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
> 

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



Current Thread
Keywords
xml