[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

how to pass parameters down through nested templates u

Subject: how to pass parameters down through nested templates using xsl:apply templates in a nested fashion?
From: "SANWAL, ABHISHEK (HP-Houston)" <abhishek.sanwal@xxxxxx>
Date: Wed, 10 Sep 2003 16:08:15 -0500
xsl apply templates parameters
Peter
Wendell
+ Other Experts

Peter, I am using the MatrixXML(attached below) to Table Creation
template you posted here to help me out.

Other than that one below I am using a number of templates that call on
others using  <xsl:apply-templates select="abcd" mode = "xyz">

But now I need to add something to it. Parameter passing down the nested
apply-templates to have a penetration of the "parameter" values as far
as I choose using further <xsl:with-params... > and also be able to
choose/between and modify values or send the original parameters the
template was called with further down to the templates that would be
called by the current template.

An example of that is in the code below. Of course it does not work.

At the first instance it sees this
"<xsl:with-param name="HeadAlign" select="{$HeadAlign}"/>"
It says
"Invalid XPath Expression"

While this works:
<xsl:with-param name="HeadAlign" select="Left"/>

Now I am curious if there is a way to pass that Incoming Parameter down
to the next templates as my outgoing parameter?

If I can use a "local" variable to store the incoming parameter and then
output it, then how can I do that? Please show me with a small code
sample.

I appreciate all your help. If you do know a way or have any ideas or a
web link for tutorial/discussion that will help me do so please let me
know.

Thanks,

Abhishek

COMPLETE CODE ATTACHED BELOW:

<?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>

Abhishek Sanwal
HP - Houston Campus
abhishek.sanwal@xxxxxx



 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list


Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.