XPath function last() gives wrong when select has a predicate
-------------------------------------------------------------
Key: XALANJ-2324
URL: http://issues.apache.org/jira/browse/XALANJ-2324
Project: XalanJ2
Issue Type: Bug
Components: Xalan-interpretive, XPath-function
Affects Versions: Latest Development Code
Reporter: Brian Minchau
Here is the testcase, the input XML is this:
<?xml version="1.0" encoding="UTF-8"?>
<project>
<author>
<firstname>Bugs</firstname>
<initial>B</initial>
<lastname>Gone</lastname>
</author>
</project>
The stylesheet is this:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8"/>
<xsl:template match="author">
<xsl:for-each select='(child::*)[not(self::initial)]'>
Child element <xsl:value-of select="position()"/>
of <xsl:value-of select="last()"/>
Element name: <xsl:value-of select="name()"/>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
The current, and incorrect output is this:
Child element 1
of 3
Element name: firstname
Child element 2
of 3
Element name: lastname
The selected elements are correct, but the last() function is returning 3
rather than 2.
If the for-each is changed to this:
<xsl:for-each select='(child::*)[not(self::junk)]'>
it iterates over the 3 children correctly (there is no child named 'junk' so
the predicate does not reduce the sequence selected by (child::*), but in this
case last() returns 4. In both cases one greater than it should.
With no predicate things work fine.
--
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]