[
https://issues.apache.org/jira/browse/XALANJ-2718?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17797245#comment-17797245
]
Mukul Gandhi commented on XALANJ-2718:
--------------------------------------
@Martin, within the XSLT stylesheet recursive-key-use1.xsl that you've
provided, if we make a modification (i.e, this is a workaround for your
mentioned XSLT use case) as follows,
<xsl:template match="product">
<xsl:copy>
<xsl:variable name="keyVar1" select="key('child', @id)"/>
<xsl:apply-templates select="(@*, node(), $keyVar1)"/>
</xsl:copy>
</xsl:template>
i.e, we use an XSLT variable to refer to the XPath expression key('child',
@id), and then referring that variable as follows : (@*, node(), $keyVar1)
the XSLT transformation you've provided works fine with XalanJ's dev repos
branch xalan-j_xslt3.0 codebase.
The XPath 3.1 parse of sequence constructor expression for e.g like (abc, pqr,
mno), within XalanJ's dev repos branch xalan-j_xslt3.0, currently uses comma as
a delimiter (i.e, this approach is not fully compliant with the XPath 3.1
language grammar) of individual XPath expressions of the sequence constructor
expression as a whole. Due to this limitation of XalanJ codebase on dev repos
branch xalan-j_xslt3.0, your originally mentioned XPath expression (@*, node(),
key('child', @id)) doesn't work with the XalanJ's dev repos branch
xalan-j_xslt3.0 codebase.
> StackOverflow exception with recursive use of key function and comma operator
> -----------------------------------------------------------------------------
>
> Key: XALANJ-2718
> URL: https://issues.apache.org/jira/browse/XALANJ-2718
> Project: XalanJ2
> Issue Type: Bug
> Security Level: No security risk; visible to anyone(Ordinary problems in
> Xalan projects. Anybody can view the issue.)
> Components: transformation, Xalan, Xalan-CmdLine
> Affects Versions: The Latest Development Code
> Reporter: Martin Honnen
> Assignee: Gary D. Gregory
> Priority: Major
> Attachments: flat-product-list.xml, recursive-key-use1.xsl
>
>
> This is a bug report on the XSLT 3.0 development branch of XalanJ.
> I have written some XSLT 2/3 code making use of a key, recursion due to use
> of the key function in apply-templates with a select attribute of the form
> {code:java}
> <xsl:apply-templates select="(@*, node(), key('child', @id))"/>{code}
>
> That spews out lots of errors/warnings about
> {noformat}
> Line no 24, col number 70, expected ), found: ,{noformat}
> (that is my translation of the German error message I get)
> {noformat}
> Zeilennummer24; Spaltennummer70; Erwartet wurde ), gefunden wurde:
> ,{noformat}
> and finally terminates with
> {noformat}
> XSLT-error (java.lang.StackOverflowError): null
> Exception in thread "main" java.lang.RuntimeException
> at org.apache.xalan.xslt.Process.doExit(Process.java:1158)
> at org.apache.xalan.xslt.Process.main(Process.java:1131){noformat}
>
> Other XSLT 3 processors like both Saxon Java and SaxonJS run the code fine
> and produce a nested product list.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]