Altova Mailing List Archives
>xsl-list Archive Home
>Recent entries
>Thread Prev - RE: [xsl] variable binding
>Thread Next - [xsl] want to process file from STDIN
RE: [xsl] variable binding
To:
Date: 11/6/2003 1:23:00 AM
So then what does it mean to say that "variable bindings declared in templates should be visible to descendants and following siblings"? This is what it says in the specs. Also, the whole reason I wanted to do this was because I am trying to find the leftmost daughter of the element ng. Is there a way to do this? I have really thought about it a lot but can't seem to find anything workable. -Shipra On Wed, 5 Nov 2003, Michael Kay wrote: > > > > I'm having trouble with variable binding - basically, I read > > that variable > > bindings declared in templates should be visible to descendants and > > following siblings, but I'm getting not getting the behavior > > I thought I > > would with my stylesheet using Saxon 6.5.2... > > You've misunderstood the rules. The scope of variables is static, not > dynamic. It doesn't depend on your source document, and it doesn't > depend on the way in which templates call each other. You're trying to > reference a variable in one template that's declared in a different > template. What you need to do is pass the value as a parameter from one > template to the other, using xsl:with-param and xsl:param. > > Michael Kay > > > > > > so the relevant part of my file looks like this (it's a > > subbranch of s): > > <ng of='proteins' role='h'> > > <nx head='targeting' role='h'> > > <W index='92'>the</W> > > <W role='h' index='93'>targeting</W> > > </nx> > > <W index='94'>of</W> > > <nx head='proteins' role='k'> > > <W index='95'>the</W> > > <W index='96'>myosin</W> > > <W role='h' index='97'>proteins</W> > > </nx> > > </ng> > > > > and my stylesheet looks like this: > > > > <xsl:template match="@* | * | comment() | processing-instruction() | > > node()"> > > <xsl:copy> > > <xsl:apply-templates select="@*|node()"/> > > </xsl:copy> > > </xsl:template> > > > > <xsl:template match="s//ng//*[1]" priority="5"> > > <xsl:variable name="branch">right</xsl:variable> > > <xsl:copy> > > <xsl:attribute name="branch"><xsl:value-of > > select="$branch"/></xsl:attribute> > > <xsl:apply-templates select="@*|node()"/> > > </xsl:copy> > > </xsl:template> > > > > > > <xsl:template match="s//ng//*" priority="4"> > > <xsl:copy> > > <xsl:attribute name="branch"><xsl:value-of > > select="$branch"/></xsl:attribute> > > <xsl:apply-templates select="@*|node()"/> > > </xsl:copy> > > </xsl:template> > > > > but when I try to run it, it tells me that the variable > > branch has not > > been declared, even though it should first have processed the first > > daughter of ng, where it has been declared. > > > > Best, > > shipra > > > > > > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list > > > > > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list > > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Disclaimer
These Archives are provided for informational purposes only and have been generated directly from the Altova mailing list archive system and are comprised of the lists set forth on www.altova.com/list/index.html. Therefore, Altova does not warrant or guarantee the accuracy, reliability, completeness, usefulness, non-infringement of intellectual property rights, or quality of any content on the Altova Mailing List Archive(s), regardless of who originates that content. You expressly understand and agree that you bear all risks associated with using or relying on that content. Altova will not be liable or responsible in any way for any content posted including, but not limited to, any errors or omissions in content, or for any losses or damage of any kind incurred as a result of the use of or reliance on any content. This disclaimer and limitation on liability is in addition to the disclaimers and limitations contained in the Website Terms of Use and elsewhere on the site.

