Re: [xsl] Creating nested output from <xsl:if>'s

Subject: Re: [xsl] Creating nested output from <xsl:if>'s
From: Paul Giannaros <ceruleanblaze@xxxxxxxxx>
Date: Sat, 4 Dec 2004 18:47:55 +0000
On Saturday 04 December 2004 14:27, Kevin Jones wrote:
> Leaving aside the question of why you are using <xsl:text>
> for the output you might find recursion more maintainable
> than "if" although a little more verbose. Perhaps something
> like this (untested).

I was using <xsl:text> because it seemed to give for better formatting using 
xsltproc. Is there a better way?
This method works fine. Thanks

> <xsl:template match="prosody" name="format-prosody">
>  <xsl:param name="atts" select="@*"/>
>
>    <xsl:for-each select="$atts[1]">
>    <xsl:choose>
>
>     <xsl:when test="self::pitch='x-high'">
>      <xsl:text>&lt;PITCH BASE="70%"&gt;</xsl:text>
>      <xsl:call-template name="format-prosody">
> 	<xsl:with-param name="atts" select="$atts[position()>1]"/>
>      </xsl:call-template>
>      <xsl:text>&lt;/PITCH&gt;</xsl:text>
>     </xsl:when>
>
>     <xsl:when test="self::rate='slow'">
>      <xsl:text>&lt;RATE SPEED="-40%"&gt;</xsl:text>
>      <xsl:call-template name="format-prosody">
> 	<xsl:with-param name="atts" select="$atts[position()>1]"/>
>      </xsl:call-template>
>      <xsl:text>&lt;/RATE&gt;</xsl:text>
>     </xsl:when>
>
>     <xsl:otherwise>
>      <xsl:call-template name="format-prosody">
> 	<xsl:with-param name="atts" select="$atts[position()>1]"/>
>      </xsl:call-template>
>     </xsl:otherwise>
>
>    </xsl:choose>
>    </xsl:for-each>
>
>    <xsl:if test="count($atts)=0">
> 	   <xsl:apply-templates/>
>    </xsl:if>
>
> </xsl:template>
>
> Kev.
>
> On Saturday 04 December 2004 17:34, Paul Giannaros wrote:
> > On Saturday 04 December 2004 13:45, George Cristian Bina
>
> wrote:
> > > Hi,
> > >
> > > You can do something like below:
> > >
> > > <xsl:if test="@pitch='x-high'">
> > >      <xsl:text>&lt;PITCH BASE="70%"&gt;</xsl:text>
> > >      <xsl:if test="@rate='slow'">
> > >          <xsl:text>&lt;RATE SPEED="-40%"&gt;</xsl:text>
> > >          <xsl:apply-templates/>
> > >          <xsl:text>&lt;/RATE&gt;</xsl:text>
> > >      </xsl:if>
> > >      <xsl:text>&lt;/PITCH&gt;</xsl:text>
> > > </xsl:if>
> >
> > That would work, but would not be very practical. There
> > are quite a few options and this would force me to have
> > to write a _very_ long nested if statement. Any other
> > solutions?
> >
> > > --~----------------------------------------------------
> > >-------------- 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@xxxxxxxxxxxxxxxxxxxxxx>
> > > --~--

Current Thread