[ http://issues.apache.org/jira/browse/XALANJ-1933?page=all ]

Brian Minchau updated XALANJ-1933:
----------------------------------

    Version: 2.6
                 (was: Latest Development Code)

> for-each bug on union of elements returned by key()
> ---------------------------------------------------
>
>          Key: XALANJ-1933
>          URL: http://issues.apache.org/jira/browse/XALANJ-1933
>      Project: XalanJ2
>         Type: Bug
>   Components: transformation, Xalan-interpretive
>     Versions: 2.6
>  Environment: Operating System: Windows XP
> Platform: PC
>     Reporter: calvin
>     Assignee: Xalan Developers Mailing List

>
> I have encountered an unexpected transform result with Xalan that seems to be 
> a
> bug. I cannot include the entire stylesheet, and I have tried to create a 
> simple
> test case that would show the bug, but I have not been able to reproduce it 
> in a
> simpler transform. I hope this might still be helpful, if only to others
> searching the bug database later to see that they aren't the only one that had
> the problem.
> I have the following template:
> <xsl:template name="createParamStatement">
>       <xsl:if test="$includeInsertParamMarkers">
>               <xsl:text>(</xsl:text>
>               <xsl:for-each select="key('entityById', @id)/KeyList/Key | 
> key('entityById',
> @id)/PropertyList/Property">
>                       <xsl:text>?</xsl:text>
>                       <xsl:if test="position() != last()"><xsl:text>, 
> </xsl:text></xsl:if>
>               </xsl:for-each>
>               <xsl:text>)</xsl:text>
>       </xsl:if>
> </xsl:template>
> The union expression in the xsl:for-each returns multiple Key and Property
> elements. If I run my transform as is above, I get the following output,
> regardless of how many elements were actually being iterated over:
> (?,)
> It shows the correct xsl:text for the first element matched, and then prints 
> the
>  comma text, which should only happen if it's not the last element, but the 
> '?'
> text doesn't get printed again.
> If, on the other hand, I assign the nodes returned by the union expression to 
> a
> variable, and iterate on the for-each through the node set in the variable, I
> get the correct output:
> (?,?,?,?) {or whatever}
> So, to summarize, the behavior that I'm seeing is that 
> <xsl:for-each select="key('someKey', @id)/Key | key('someKey', @id)/Prop">
>   <xsl:text>?</xsl:text>
>   <xsl:if test="position() != last()">, </xsl:if>
> </xsl:for-each>
> behaves differently than does
> <xsl:variable name="returnedElems" select="key('someKey', @id)/Key |
> key('someKey', @id)/Prop"/>
> <xsl:for-each select="$returnedElems">
>   <xsl:text>?</xsl:text>
>   <xsl:if test="position() != last()">, </xsl:if>
> </xsl:for-each>
> In my failing transform, the key referenced is defined in an imported
> stylesheet. I've tried some simple transforms like above with an imported key,
> but have not been able to reproduce the problem. In the full trasnform, the
> template that behaves strangely is called from within another template, in the
> following context:
> <xsl:for-each
> select="descendant-or-self::[EMAIL PROTECTED]($parent2ThisType)]|.">
>   <xsl:if test="not($mode='dependencyMode' and not(@parent2ThisType))">
>     <!-- do a bunch of other stuff -->
>     <xsl:variable name="paramMarkers">
>       <xsl:call-template name="createParamStatement"/>
>     </xsl:variable>
>     <!-- do a bunch more stuff -->
>     <xsl:value-of select="concat($someOtherVar, ": ", $paramMarkers)"/>
>   </xsl:if>
> </xsl:for-each>
> To repeat, the behavior I'm seeing is that a union inside a for-each's select 
> is
> behaving different than first binding the union results to a variable and
> passing the variable reference to the for-each's select.
> Saxon behaves the same in both cases, and outputs the correct results (a
> comma-separated list of '?' with no comma after the last '?'), and xalan-j 
> 2.6.0
> behaves correctly if I assign to a variable first, but if I don't assign to a
> variable, it prints only one '?' (which is mistake number 1) and ends the list
> with a comma (which is mistake number 2, since comma shouldn't be output after
> last elem), which implies to me that perhaps the select is iterating through
> multiple nodes but only executing inside the for-each on the first node in the
> select.
> I'm sorry I can't give the entire failing stylesheet, but I am not allowed to.
> If you need more information, I'm happy to answer any questions about the
> failing transform and the context. I'll try more to create a simple failing 
> test
> case, but I couldn't get one to fail right now and can't spend more time on it
> at the moment.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to