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 |