gnase
gnase

Reputation: 638

How to call a template in another template in xslt?

I have an .xml data like this:

<Check>
    <NotfoundUser>
        <User>
            <Forename>Jenny</Forename>
            <Surname>Hollands</Surname>
            <Birthday>30.01.1985</Birthday>
            <Status>Employee</Status>
            <City>Los Angeles</City>
        </User>
        <User>
            <Forename>Michael</Forename>
            <Surname>Williams</Surname>
            <Birthday>30.12.1965</Birthday>
            <Status>Retired</Status>
            <City>New York</City>
        </User>
    </NotfoundUser>
</Check>

I am trying to write .xsl data to make a table.

<div class='div4'>
    <table class='table4' style='font-size:12pt'>
        <tr>
            <th>Name</th>
            <th>Birthday</th>
            <th>Notice</th>
        </tr>
        <xsl:for-each select="/Check/NotfoundUser/*">
        <tr>
            <td><xsl:value-of select="./Forename"/> <xsl:text> </xsl:text> <xsl:value-of select="Surname"/></td>
            <td><xsl:value-of select="./Birthday"/></td>
            <td>
                <xsl:call-template name="replacecity">
                <xsl:with-param name="value" select="./City"/>
                </xsl:call-template>
            </td>
        </tr>
        </xsl:for-each>
    </table>
</div>

<!-- template to replace -->
<xsl:template name="replacecity">
    <xsl:param name="value"/>
        <xsl:choose>
            <xsl:when test="$value = 'New York'">
                <xsl:text>Live in New York</xsl:text>
            </xsl:when>
            <xsl:when test="$value = 'Los Angeles'">
                <xsl:text>Live in Los Angeles</xsl:text>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$value"/>
            </xsl:otherwise>
        </xsl:choose>
</xsl:template>

I need to create a superscript above city like this.

If Status = Retired -> superscript is 1
If Status = Employee -> superscript is 2

So I am thinking to create a new template (e.g. called replacestatus) and integrate inside template replacecity, but I don't know how. Could you guys help me about this, or do you have a better idea for that? enter image description here

Upvotes: 0

Views: 1411

Answers (2)

michael.hor257k
michael.hor257k

Reputation: 116959

I don't see why you need to call any additional templates here. Why can't you do simply:

XSLT 1.0

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>

<xsl:template match="/Check">
    <table border="1">
        <tr>
            <th>Name</th>
            <th>Birthday</th>
            <th>Notice</th>
        </tr>
        <xsl:for-each select="NotfoundUser/User">
            <tr>
                <td>
                    <xsl:value-of select="Forename"/>
                    <xsl:text> </xsl:text> 
                    <xsl:value-of select="Surname"/>
                </td>
                <td>
                    <xsl:value-of select="Birthday"/>
                </td>
                <td>
                    <xsl:text>Lives in </xsl:text>
                    <xsl:value-of select="City"/>
                    <sup>
                        <xsl:choose>
                            <xsl:when test="Status='Retired'">1</xsl:when>
                            <xsl:when test="Status='Employee'">2</xsl:when>
                        </xsl:choose>
                    </sup> 
                </td>
            </tr>
        </xsl:for-each>
    </table> 
</xsl:template>

</xsl:stylesheet>

Upvotes: 1

drone6502
drone6502

Reputation: 433

Try using xsl:include or xsl:import

Here are some examples:

http://www.xml.com/pub/2000/11/01/xslt/index.html

Upvotes: 0

Related Questions