|
Subject: RE: [xsl] how to pass parameters down through nested templates using xsl:apply templates in a nested fashion? From: "Michael Kay" <mhk@xxxxxxxxx> Date: Thu, 11 Sep 2003 09:08:03 +0100 |
> Wierdly some places {} are required and some places they are
> not. Is there some kind of ruleset or guideline on that ??
Yes. It's called the language specification.
http://www.w3.org/TR/xslt#attribute-value-templates
Michael Kay
>
> Here is the working XSL that should show anyone how to keep
> pushing parameters as and when required in nested template
> calls or apply templates
>
> Abhishek Sanwal
> HP - Houston Campus
> abhishek.sanwal@xxxxxx
>
> WORKING CODE:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <xsl:stylesheet version="1.0"
> xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> xmlns:fo="http://www.w3.org/1999/XSL/Format">
>
> <xsl:template match="Matrix">
> <xsl:param name="HeadAlign" select="'Right'"/>
> <xsl:param name="DataAlign" select="'Right'"/>
>
> <xsl:if test="contains(@HeadFlow,'H')">
> <font class="debug">Horizontal</font>
>
> <table border="0">
> <xsl:apply-templates mode="H">
> <xsl:with-param name="HeadAlign"
> select="'Center'"/>
> <xsl:with-param name="DataAlign"
> select="'Center'"/>
> </xsl:apply-templates>
> </table>
> </xsl:if>
>
> <xsl:if test="contains(@HeadFlow,'V')">
> <font class="debug">Vertical</font>
>
>
> <table border="0">
> <xsl:apply-templates mode="V">
> <xsl:with-param name="HeadAlign"
> select="'Left'"/>
> <xsl:with-param name="DataAlign"
> select="'Left'"/>
> </xsl:apply-templates>
> </table>
> </xsl:if>
>
> </xsl:template>
>
> <xsl:template match="MatrixHeadArray" mode="H">
> <xsl:param name="HeadAlign" select="'Right'"/>
> <xsl:param name="DataAlign" select="'Right'"/>
> <tr align="{$HeadAlign}">
> <xsl:apply-templates mode="H">
> <xsl:with-param name="HeadAlign" select="$HeadAlign"/>
> <xsl:with-param name="DataAlign" select="$DataAlign"/>
> </xsl:apply-templates>
> </tr>
> </xsl:template>
>
> <xsl:template match="MatrixHeadCell" mode="H">
> <xsl:param name="HeadAlign" select="'Right'"/>
> <xsl:param name="DataAlign" select="'Right'"/>
> <th align="{$HeadAlign}">
> <xsl:apply-templates/>
> </th>
> </xsl:template>
>
> <xsl:template match="MatrixDataArray" mode="H">
> <xsl:param name="HeadAlign" select="'Right'"/>
> <xsl:param name="DataAlign" select="'Right'"/>
> <tr align="{$DataAlign}">
> <xsl:apply-templates mode="H">
> <xsl:with-param name="HeadAlign" select="$HeadAlign"/>
> <xsl:with-param name="DataAlign" select="$DataAlign"/>
> </xsl:apply-templates>
> </tr>
> </xsl:template>
>
> <xsl:template match="MatrixDataCell" mode="H">
> <xsl:param name="HeadAlign" select="'Right'"/>
> <xsl:param name="DataAlign" select="'Right'"/>
> <td align="{$DataAlign}">
> <xsl:apply-templates/>
> </td>
> </xsl:template>
>
> <xsl:template match="MatrixHeadArray" mode="V">
> <xsl:param name="HeadAlign" select="'Right'"/>
> <xsl:param name="DataAlign" select="'Right'"/>
> <xsl:for-each select="MatrixHeadCell">
> <tr>
> <th align="{$HeadAlign}">
> <xsl:apply-templates/>
> </th>
> <xsl:variable name="headloc">
> <xsl:value-of select="@i"/>
> </xsl:variable>
> <xsl:for-each select="../../MatrixDataArray">
> <td align="{$DataAlign}">
> <xsl:apply-templates
> select="MatrixDataCell[@i=$headloc]"/>
> </td>
> </xsl:for-each>
> </tr>
> </xsl:for-each>
> </xsl:template>
>
> <xsl:template match="MatrixDataCell" mode="V"/>
> <xsl:param name="HeadAlign" select="'Right'"/>
> <xsl:param name="DataAlign" select="'Right'"/>
>
> </xsl:stylesheet>
>
> -----Original Message-----
> From: SANWAL, ABHISHEK (HP-Houston)
> Sent: Wednesday, September 10, 2003 5:31 PM
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: RE: [xsl] how to pass parameters down through nested
> templates using xsl:apply templates in a nested fashion?
>
> Wendell,
>
> Just made the changes you suggested. But still have an issue.
> Please correct the following if they are wrong.
>
> To push the initial value of the parameter - (Okay or not)
> <xsl:with-param name="HeadAlign" select="'Center'"/>
> <xsl:with-param name="DataAlign" select="'Left'"/>
>
> To obtain the parameter value in the called template (with default
> values)
> <xsl:param name="HeadAlign" select="'Right'"/>
>
> Its just a literal string that I want to place in the <th>,
> <td> or <tr> tags to set the text alignment of the cell. Like
> this... (doesn't work) To push the value of the parameter
> out. (Should I use XSL"value of and how would I actually
> write it into the the following HTML tags ??
>
> <tr align="$HeadAlign">
> <th align="$HeadAlign">
> <td align="$DataAlign">
>
> Unfortunately it wont "spit" out those parameters into the
> th, tr, td values. I have tried this with curly braces and
> without and etc.
>
> Of course I am getting nowhere with the trial and error.
>
> Please let me know what would be the correct "syntax" for the
> THREE XSL statements as mentioned above. (to make this possible :( ).
>
> Thanks a lot.
>
> Abhishek Sanwal
>
>
> 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 -> |
|---|---|---|
| RE: [xsl] how to pass parameters do, SANWAL, ABHISHEK (HP | Thread | RE: [xsl] how to pass parameters do, SANWAL, ABHISHEK (HP |
| RE: [xsl] Issues with output of IMG, Michael Kay | Date | RE: [xsl] Re: Issues with output of, Andrew Welch |
| Month |