Closed
Bug 162258
Opened 22 years ago
Closed 22 years ago
XSLT: variables are accessible outside of their scope
Categories
(Core :: XSLT, defect)
Tracking
()
VERIFIED
WORKSFORME
People
(Reporter: news, Assigned: peterv)
References
()
Details
The following example uses two templates with xsl:variable definition of $test. The called template "abc" calculates $temp * $temp. Mozilla 1.0 do the job and gives the results 25 and 36 for the XML input data <a>5</a> and <b>6</b>. This is a non-standards-compliant behaviour. Other XSLT processors like MSXML3, Saxon or Sablotron interrrupt the transformation process with an error message. xsl_variable_test.xml <?xml version="1.0" encoding="ISO-8859-1"?> <?xml-stylesheet href="xsl_variable_test.xsl" type="text/xsl"?> <wurzel> <inhalt> <a>5</a> <b>6</b> </inhalt> </wurzel> xsl_variable_test.xsl <?xml version="1.0" encoding="ISO-8859-1"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html" doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN" doctype-system="http://www.w3.org/TR/html401/loose.dtd" encoding="ISO-8859-1" version="4.01" indent="yes" /> <xsl:template match="/"> <html> <head> <title>Test</title> </head> <body> <xsl:apply-templates /> </body> </html> </xsl:template> <xsl:template match="wurzel/inhalt"> <xsl:apply-templates /> </xsl:template> <xsl:template match="a"> <xsl:variable name="test"><xsl:value-of select="." /></xsl:variable> <xsl:call-template name="abc" /> </xsl:template> <xsl:template match="b"> <xsl:variable name="test"><xsl:value-of select="." /></xsl:variable> <xsl:call-template name="abc" /> </xsl:template> <xsl:template name="abc"> <p> <xsl:value-of select="$test * $test" /> </p> </xsl:template> </xsl:stylesheet>
Assignee | ||
Comment 1•22 years ago
|
||
We need a build id.
This is a known problem with the old variables code, it should however be fixed now that the variabels rewrite has landed. Thomas: please download a nightly build and see if it works correctly there.
Reporter | ||
Comment 3•22 years ago
|
||
Build ID: 2002053012
Comment 4•22 years ago
|
||
my trunk says NaN NaN which up to lack of good error reporting is WORKSFORME. Error reporting is a different bug.
Status: UNCONFIRMED → RESOLVED
Closed: 22 years ago
Resolution: --- → WORKSFORME
Reporter | ||
Comment 5•22 years ago
|
||
@Axel: What happens with select="number($test) * number($test)" instead of select="$test * $test" [also 25 and 36 in Mozilla 1.0] or select="concat($test,$test)" [55 and 66 in Mozilla 1.0]?
Reporter | ||
Comment 6•22 years ago
|
||
Build ID: 2002081218 select="number($test) * number($test)" NaN / NaN select="concat($test,$test)" errorerror / errorerror ???
Comment 7•22 years ago
|
||
$test is "error", which number() converts into NaN. VERIFIED per reporters comments
Status: RESOLVED → VERIFIED
Reporter | ||
Comment 8•22 years ago
|
||
Ok, that's also the explanation for the "errorerror" result of the concatenation. But the variable content "error" ist a bad idea. How can I divide my possible own $test="error" from the error message?
You should not do this at all. Once we have proper errorhandling the transformation will stop compleatly once we hit an undeleared variable.
Reporter | ||
Comment 10•22 years ago
|
||
I want not do this in my projects, I use now xsl:call-template, xsl:width-param and xsl:param in this way: <xsl:template match="a"> <xsl:call-template name="abc"> <xsl:with-param name="test" select="." /> </xsl:call-template> </xsl:template> <xsl:template match="b"> <xsl:call-template name="abc"> <xsl:with-param name="test" select="." /> </xsl:call-template> </xsl:template> <xsl:template name="abc"> <xsl:param name="test" /> <p> <xsl:value-of select="number($test) * number($test)" /> </p> </xsl:template> But the transformation of the test document should stopped with an error message like in the IE, Saxon or Sablotron processors.
Absolutly, but that's covered by bug 112622. The short story is: our errorhandling sucks!
You need to log in
before you can comment on or make changes to this bug.
Description
•