[xsl] Forgive the noob

Subject: [xsl] Forgive the noob
From: "Bordeman, Chris" <Chris.Bordeman@xxxxxxxxxxxxxxxxx>
Date: Fri, 8 Aug 2008 15:00:24 -0500
Hi guys, doing my first XSLT and need a bit of help.

Basically, I'm transforming essentially a serialized object structure
into a list of field-value pair nodes.

There are a lot of complicated nodes I need to get at often, like the
first address node under the first customer so I wanted to set up a
bunch of variables and locate and and assign helper variables before I
get into the template proper, which is itself very simple.  I've written
some functions to help w/ this and a single named template called "init"
I call up front to set up the variables.

The problem is when I assign to the variables inside my named template,
they don't keep their value.  I'd just add this stuff to the main
template but I really need to split all this init stuff into an include
file or something so they can be reused in other xslts.

How can I make these variables visible where I need to use them?  Here's
a bit of what I'm doing now:

	<!-- declare global helper variables -->
	<xsl:variable name="buyerfullname" select="''"/>
	<xsl:variable name="buyeraddress" select="''"/>
	<xsl:variable name="buyeraddress1" select="''"/>
	<xsl:variable name="buyercsz" select="''"/>
	<xsl:variable name="buyerhomephone" select="''"/>
	<xsl:variable name="buyerblock" select="''"/>

	<xsl:template name="init">
		<xsl:variable name="buyer"
select="Contract/Borrowers/Borrower[NumOrder='1']"/>
		<xsl:choose>
			<xsl:when test="string($buyer) != ''">
				<xsl:variable name="buyerfullname"
select="fn:borrowerfullname($buyer)"/>
				<xsl:variable name="buyeraddress"
select="$buyer/Addresses/BorrowerAddress[IsCurrent='true' and
position()=1]"/>
				<xsl:variable name="buyeraddress1"
select="fn:address1($buyeraddress)"/>
				<xsl:variable name="buyercsz"
select="fn:csz($buyeraddress)"/>
				<xsl:variable name="buyerhomephone"
select="$buyer/HomePhone/PhoneNumber"/>
				<xsl:variable name="buyerblock"
select="string-join(($buyerfullname,$buyeraddress1,$buyercsz,$buyerhomep
hone),fn:crlf())"/>
			</xsl:when>
		</xsl:choose>
	</xsl:template>

	<!-- create helper variables -->
	<xsl:call-template name="init"/>

	<!-- Main Template, generates FieldValuePairs -->
	<!-- ERRORS: I GET 'VARIABLE DOES NOT EXIST' ERRORS -->
	<xsl:template match="/">
		<FieldValuePairs>
			<FieldValuePair field="BuyerState">
ERROR --->			<xsl:attribute
name="value"><xsl:value-of
select="$buyeraddress/State"/></xsl:attribute>
			</FieldValuePair>
			<FieldValuePair
field="BuyerFullNameStreetCityStateZipPhone">
ERROR --->			<xsl:attribute
name="value"><xsl:value-of select="$buyerblock"/></xsl:attribute>
			</FieldValuePair>
		</FieldValuePairs>
	</xsl:template>

Thanks for any help!

Chris Bordeman

Current Thread