Subject: RE: Variable Scoping From: Khun Yee Fung <kyeefung@xxxxxxxxxx> Date: Wed, 3 Nov 1999 11:58:12 -0500 |
There is of course another twist to the story. Given the following XML file, <?xml version='1.0'?> <top> <second>1</second> <second>2</second> <second>3</second> <second>4</second> <second>5</second> <second>6</second> </top> And the following XSLT document. <?xml version='1.0'?> <xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'> <xsl:output method='html'/> <xsl:template match='/'> <top> <xsl:variable name='var' select='0'/> <xsl:for-each select='top/second'> <xsl:variable name='var' select='$var + number(.)'/> <second><xsl:value-of select='.'/></second> <xsl:if test='position() = last()'><xsl:value-of select='$var'/></xsl:if> </xsl:for-each> </top> </xsl:template> </xsl:stylesheet> I tried SAXON, XT, and Lotus XSLT Processors. The results are as follow. Lotus ------- % [11:32:49] > java com.lotus.xsl.Process -in var.xml -xsl var.xsl ========= Parsing file:var.xsl ========== Parse of file:var.xsl took 931 milliseconds ========= Parsing file:var.xml ========== Parse of file:var.xml took 100 milliseconds ============================= Transforming... <!DOCTYPE top PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <top> <second>1</second> <second>2</second> <second>3</second> <second>4</second> <second>5</second> <second>6</second>21</top> transform took 251 milliseconds XSLProcessor: done XT --- % [11:33:23] > xt var.xml var.xsl <top><second>1</second><second>2</second><second>3</second><second>4</second ><second>5</second><second>6</second>6</top> SAXON ---------- % [11:33:32] > saxon var.xml var.xsl Error processing source document At xsl:variable on line 10 of file:var.xsl: Local variable var is already declared Elapsed time: 440 milliseconds The specification (section 11.5 of the October PR) seems to say that the SAXON result is the correct one. It says 'It is an error if a binding established by an xsl:variable or xsl:param element within a template shadows another binding established by an xsl:variable or xsl:param element also within the template'. In fact, no two bindings can occur within the same template. This includes bindings within the same element for sure. Personally I consider the argument that a variable as in Java or C++ makes it harder to create an implementation "that processes a document other than in a batch-like way, starting at the beginning and continuing through to the end" to be bogus. I personally think that the purpose of designing a programming language is to make the life of the developer easier, not to make the implementation of the language easier. Unless, of course, XSLT is not a programming language. Khun Yee -----Original Message----- From: Clark C. Evans [mailto:clark.evans@xxxxxxxxxxxxxxxxxxxx] Sent: Wednesday, November 03, 1999 10:14 AM To: xsl-list@xxxxxxxxxxxxxxxx Subject: Variable Scoping $ cat test.xml <parent> <child/> </parent> $ cat test.xsl <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:data="any-uri" > <xsl:template match="/" > <xsl:variable name="x">Outer</xsl:variable> <xsl:for-each select="*"> <xsl:variable name="x">Inner</xsl:variable> <xsl:value-of select="$x" /> </xsl:for-each> </xsl:template> </xsl:stylesheet> $ saxon test.xml test.xsl Error processing source document At xsl:variable on line 8 of file:/home/clark/test.xsl: Local variable x is already declared $ xt test.xml test.xsl Inner ... Which one is correct? Clark 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: Variable Scoping, Kay Michael | Thread | Is childNumber a MSXML function?, Paul Johnson |
Re: Variable Scoping, Phil Lanch | Date | General question, Esfandiar Mazdeh |
Month |