Re: [xsl] Newbie wonders why the variable can change value?

Subject: Re: [xsl] Newbie wonders why the variable can change value?
From: Michael Kay <mike@xxxxxxxxxxxx>
Date: Mon, 21 Feb 2011 23:27:11 +0000
A template that only matches the top of the tree, the Org-level ACCT, processes and nests the appropriate siblings as follows :

<xsl:variable name="currentOR" select="HIERARCHY_Info/@Acct_ID"/>
<xsl:apply-templates  mode="RE" select="../ACCT[HIERARCHY_Info/@Prnt_Acct_ID=$currentOR]"/>	
				
I use the variable, because the following alternative coding returns none of the sibling nodes,  nodes, because (I think) it compares the siblings' parent-acct-IDs to their own acct-IDs:

<xsl:apply-templates mode="RE" select="../ACCT[HIERARCHY_Info/@Prnt_Acct_ID=HIERARCHY_Info/@Acct_ID]"/>


Brandon has given you an excellent explanation of how variables in XSLT work. But I suspect that might only part of your difficulty here. The essential reason the two examples above give different results is that the expression HEIREARCHY/@Acct_ID is evaluated in a different context in the two cases. Inside a predicate (i.e. in square brackets) a relative path expression is evaluated relative to the node you are testing - in this case, the ACCT element.


Michael Kay
Saxonica

Current Thread