[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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Re: matching multiple times, , Dimitre Novatchev | Thread | [xsl] <no subject>, k . weitzer |
[xsl] Re: matching multiple times, , Dimitre Novatchev | Date | Re: [xsl] <no subject>, Trevor Nash |
Month |
Keywords