DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://nagoya.apache.org/bugzilla/show_bug.cgi?id=11118>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=11118 XSLTC: Incorrect order of nodes for generate-id on preceding:: axis node-set Summary: XSLTC: Incorrect order of nodes for generate-id on preceding:: axis node-set Product: XalanJ2 Version: CurrentCVS Platform: Other OS/Version: Other Status: NEW Severity: Normal Priority: Other Component: org.apache.xalan.xsltc AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] I ran the following test: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/root"> <root> <xsl:for-each select="header"> <xsl:variable name="header-id" select="generate-id()"/> <section> <xsl:copy-of select="following::para[generate-id(preceding::header[1]) = $header-id]"/> </section> </xsl:for-each> </root> </xsl:template> </xsl:stylesheet> On the following input: <root> <header/> <para val="1"/> <para val="2"/> <para val="3"/> <header/> <para val="4"/> </root> I correctly get the following result: <root> <section> <para val="1"/> <para val="2"/> <para val="3"/> </section> <section> <para val="4"/> </section> </root> Now, if I replace preceding::header[1] by preceding::header, I get the same result, but I get a different result with Xalan: <root> <section> <para val="1"/> <para val="2"/> <para val="3"/> <para val="4"/> </section> <section/> </root> In this case, Xalan is correct and XSLTC incorrect. In the second iteration of the loop, preceding::header returns a node-set containing two header elements. According to the XSLT 1.0 spec, gererate-id() should use the first node in *document order*, thus generate an id for the first header element in the document. XSLTC appears to use reverse document order.
