xsl-list
[Top] [All Lists]

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

2004-12-04 07:02:05
Hi Paul,

You can also do this with a chain of named templates, each performs one check and delegates to the next:

<xsl:template name="checkPitch">
    <xsl:if test="@pitch='x-high'">
        <xsl:text>&lt;PITCH BASE="70%"&gt;</xsl:text>
        <xsl:call-template name="checkRate"/>
        <xsl:text>&lt;/PITCH&gt;</xsl:text>
    </xsl:if>
</xsl:template>
<xsl:template name="checkRate">
    <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:template>
<xsl:template match="//prosody">
    <xsl:call-template name="checkPitch"/>
</xsl:template>

Best Regards,
George
---------------------------------------------------------------------
George Cristian Bina
<oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com


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(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--