Subject: RE: [xsl] variable binding From: "Michael Kay" <mhk@xxxxxxxxx> Date: Thu, 6 Nov 2003 15:08:18 -0000 |
> > 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. Actually, it says "for all following-siblings and their descendants". This means nodes in the stylesheet tree that are following-siblings, or descendants of following-siblings, of the xsl:variable element in the stylesheet tree. Michael Kay > > 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 > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] want to process file from, Michael Kay | Thread | RE: RE: [xsl] variable binding, cknell |
RE: [xsl] DTD Element problem, Michael Kay | Date | RE: [xsl] want to process file from, Michael Kay |
Month |