  | |  | Possible bug with extension 'function ' ? | Possible bug with extension 'function ' ? 2005-09-16 - By buddy
I have define a function that returns a the first node for a passed in node set. For example:
<func:function name="my:getSomeElementOfANodeSet">
<xsl:param name="nodes"/>
<xsl:for-each select="$nodes">
<xsl:sort select="some sort criteria based on children nodes" order="descending"/>
<xsl:if test="position() = 1">
<func:result select="."/>
</xsl:if>
</xsl:for-each>
</func:function>
This function works fine.
However, if I assign the results to a variable, a strange things happens (or maybe it is intended behavior).
<xsl:variable name="try1" select="my:getSomeElementOfANodeSet(theNodeSet)"/>
..blah blah blah...
<xsl:copy-of select="$try1"/> <!-everything is great, I output the node -->
<SomeNode attrib1="{local-name(my:getSomeElementOfANodeSet(someOtherNodeSet))}"/>
<xsl:copy-of select="$try1"/> <!-Yikes, $try1 is now different. It is the node from the last call made, not the original call -->
The point that I'm trying to illustrate is that for some reason, when I call the function again with a different node set
the value of the variable, $try1 is equal to the result of the last function call.
Is this intended behavior?
<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas -microsoft-com:office:word" xmlns="http://www.w3.org/TR/REC-html40">
<head> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii"> <meta name=Generator content="Microsoft Word 11 (filtered medium)"> <style> <!-- /* Font Definitions */ @(protected) {font-family:Wingdings; panose-1:5 0 0 0 0 0 0 0 0 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {margin:0in; margin-bottom:.0001pt; font-size:12.0pt; font-family:"Times New Roman";} a:link, span.MsoHyperlink {color:blue; text-decoration:underline;} a:visited, span.MsoHyperlinkFollowed {color:purple; text-decoration:underline;} span.EmailStyle17 {mso-style-type:personal-compose; font-family:Arial; color:windowtext;} @(protected) Section1 {size:8.5in 11.0in; margin:1.0in 1.25in 1.0in 1.25in;} div.Section1 {page:Section1;} --> </style>
</head>
<body lang=EN-US link=blue vlink=purple>
<div class=Section1>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt; font-family:Arial'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt; font-family:Arial'>I have define a function that returns a the first node for a passed in node set. For example:<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt; font-family:Arial'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt; font-family:Arial'> <func:function name="my:getSomeElementOfANodeSet"><o:p>< /o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt; font-family:Arial'> <xsl:param name="nodes"/><o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt; font-family:Arial'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt; font-family:Arial'> <xsl:for-each select="$nodes"><o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt; font-family:Arial'> <xsl :sort select="some sort criteria based on children nodes" order="descending"/><o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt; font-family:Arial'> <xsl :if test="position() = 1"><o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt; font-family:Arial'> <func :result select="."/><o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt; font-family:Arial'> < /xsl:if><o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt; font-family:Arial'> </xsl:for-each><o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt; font-family:Arial'> </func:function><o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt; font-family:Arial'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt; font-family:Arial'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt; font-family:Arial'>This function works fine.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt; font-family:Arial'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt; font-family:Arial'>However, if I assign the results to a variable, a strange things happens (or maybe it is intended behavior).<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt; font-family:Arial'><o:p> </o:p></span></font></p>
<p class=MsoNormal style='text-indent:.5in'><font size=2 face=Arial><span style='font-size:10.0pt;font-family:Arial'><xsl:variable name=”try1& #8221; select=”my:getSomeElementOfANodeSet(theNodeSet)”/><o:p></o:p>< /span></font></p>
<p class=MsoNormal style='text-indent:.5in'><font size=2 face=Arial><span style='font-size:10.0pt;font-family:Arial'><o:p> </o:p></span></font></p>
<p class=MsoNormal style='text-indent:.5in'><font size=2 face=Arial><span style='font-size:10.0pt;font-family:Arial'>……blah blah blah…& #8230;.<o:p></o:p></span></font></p>
<p class=MsoNormal style='text-indent:.5in'><font size=2 face=Arial><span style='font-size:10.0pt;font-family:Arial'><o:p> </o:p></span></font></p>
<p class=MsoNormal style='text-indent:.5in'><font size=2 face=Arial><span style='font-size:10.0pt;font-family:Arial'><xsl:copy-of select=”$try1& #8221;/> <!—everything is great, I output the node </span></font><font size=2 face=Wingdings><span style='font-size:10.0pt;font-family:Wingdings'>à< /span></font><font size=2 face=Arial><span style='font-size:10.0pt;font-family:Arial'><o:p></o:p>< /span></font></p>
<p class=MsoNormal style='text-indent:.5in'><font size=2 face=Arial><span style='font-size:10.0pt;font-family:Arial'><o:p> </o:p></span></font></p>
<p class=MsoNormal style='text-indent:.5in'><font size=2 face=Arial><span style='font-size:10.0pt;font-family:Arial'><SomeNode attrib1=”{local -name(my:getSomeElementOfANodeSet(someOtherNodeSet))}”/> <o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt; font-family:Arial'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt; font-family:Arial'> <xsl:copy-of select=”$try1”/> <!—Yikes, $try1 is now different. It is the node from the last call made, not the original call </span></font><font size=2 face=Wingdings><span style='font-size:10.0pt;font-family:Wingdings'>à</span></font><font size =2 face=Arial><span style='font-size:10.0pt;font-family:Arial'><o:p></o:p></span>< /font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt; font-family:Arial'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt; font-family:Arial'>The point that I’m trying to illustrate is that for some reason, when I call the function again with a different node set<o:p></o:p ></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt; font-family:Arial'>the value of the variable, $try1 is equal to the result of the last function call.<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt; font-family:Arial'><o:p> </o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt; font-family:Arial'>Is this intended behavior?<o:p></o:p></span></font></p>
<p class=MsoNormal><font size=2 face=Arial><span style='font-size:10.0pt; font-family:Arial'><o:p> </o:p></span></font></p>
</div>
</body>
</html>
|
|
 |