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

Subject: Re: [xsl] Creating nested output from <xsl:if>'s
From: George Cristian Bina <george@xxxxxxx>
Date: Sat, 04 Dec 2004 15:45:50 +0200
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>

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


Paul Giannaros wrote:
Sorry for the bad subject line, its pretty hard to explain. Basically i'm transforming one XML language into another. In doing this, I have some code like the following:

<xsl:template match="//prosody">
        ...
    <xsl:choose>
        <xsl:when test="@pitch='x-high'">
             <xsl:text>&lt;PITCH BASE="70%"&gt;</xsl:text>
                  <xsl:apply-templates/>
             <xsl:text>&lt;/PITCH&gt;</xsl:text>
        </xsl:when>
        ...
    <xsl:choose>
        <xsl:when test="@rate='slow'">
             <xsl:text>&lt;RATE SPEED="-40%"&gt;</xsl:text>
                    <xsl:apply-templates/>
             <xsl:text>&lt;/RATE&gt;</xsl:text>
         </xsl:when>
         ...
</xsl:template>


Now this all works fine when using individual prosody tags with one attribute (pitch or rate). The issue arises when doing something like:


<prosody rate="slow" pitch="x-high">Here is some high, slow speech</prosody>

The output is the following:

<PITCH BASE="70%">Here is some high, slow speech</PITCH><RATE SPEED="-40%">Here is some high, slow speech</RATE>

Obviously not what was wanted (nested tags with the text in them). How can I achieve what I need? If possible, without resorting to templates for each attribute.
Thanks for your time.

Current Thread