J
Johannes Lebek
Hi there,
somehow, I cannot access nodes that are stored in a variable. I'm using
Xalan 2.5.1 and the following commands:
================ BEGIN ====================
<xsl:variable name="referenced-node" select="//a[@att1 = current()/@att2]"/>
<xsl:variable name="attribute-source">
<xsl:choose>
<xsl:when test="$referenced-node">
<xsl:copy-of select="$referenced-node"/>
</xsl:when>
<xsltherwise>
<xsl:copy-of select="."/>
</xsltherwise>
</xsl:choose>
</xsl:variable>
<!-- line 556 follows -->
<!-- this is where the error occurs -->
<xsl:value-of select="$attribute-source/@att3"/>
================= END =====================
I cannot access $attribute-source. If the node or its attribute 'att3'
could not be found, nothing would be written. But even then no
ClassCastException should be thrown.
Is this problem caused by the <xsl:copy-of> statements? My understand is
that I can store the nodes in variable $attribute-source using
<xsl:copy-of>. <xsl:value-of> would not help in this case, because I
need the node and not its text value.
If I run Xalan, it tells me:
================ BEGIN ====================
; SystemID: file:///path/../../stylesheet.xsl; Line#: 556; Column#: 59
javax.xml.transform.TransformerException: java.lang.ClassCastException
at
org.apache.xalan.templates.ElemValueOf.execute(ElemValueOf.java:330)
at
org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:425)
at
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:215)
at
org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:425)
at
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:215)
at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java(Compiled
Code))
at org.apache.xalan.templates.ElemIf.execute(ElemIf.java:203)
at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2318)
at org.apache.xalan.templates.ElemCopy.execute(ElemCopy.java:153)
at
org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:425)
at
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:215)
at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2318)
at
org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:699)
at
org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:425)
at
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:215)
at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2318)
at
org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java:2185)
at
org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1263)
at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:671)
at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1179)
at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1157)
at org.apache.xalan.xslt.Process.main(Process.java:1025)
---------
java.lang.ClassCastException
at
org.apache.xpath.axes.FilterExprIteratorSimple.executeFilterExpr(FilterExprIteratorSimple.java(Compiled
Code))
at
org.apache.xpath.axes.FilterExprWalker.setRoot(FilterExprWalker.java(Compiled
Code))
at
org.apache.xpath.axes.WalkingIterator.setRoot(WalkingIterator.java(Compiled
Code))
at
org.apache.xpath.axes.LocPathIterator.executeCharsToContentHandler(LocPathIterator.java:276)
at
org.apache.xalan.templates.ElemValueOf.execute(ElemValueOf.java:311)
at
org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:425)
at
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:215)
at
org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:425)
at
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:215)
at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java(Compiled
Code))
at org.apache.xalan.templates.ElemIf.execute(ElemIf.java:203)
at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2318)
at org.apache.xalan.templates.ElemCopy.execute(ElemCopy.java:153)
at
org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:425)
at
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:215)
at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2318)
at
org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:699)
at
org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:425)
at
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:215)
at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2318)
at
org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java:2185)
at
org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1263)
at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:671)
at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1179)
at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1157)
at org.apache.xalan.xslt.Process.main(Process.java:1025)
================= END =====================
Any idea, how to access the node stored in $attribute-source?
Thanks in advance,
Johannes
somehow, I cannot access nodes that are stored in a variable. I'm using
Xalan 2.5.1 and the following commands:
================ BEGIN ====================
<xsl:variable name="referenced-node" select="//a[@att1 = current()/@att2]"/>
<xsl:variable name="attribute-source">
<xsl:choose>
<xsl:when test="$referenced-node">
<xsl:copy-of select="$referenced-node"/>
</xsl:when>
<xsltherwise>
<xsl:copy-of select="."/>
</xsltherwise>
</xsl:choose>
</xsl:variable>
<!-- line 556 follows -->
<!-- this is where the error occurs -->
<xsl:value-of select="$attribute-source/@att3"/>
================= END =====================
I cannot access $attribute-source. If the node or its attribute 'att3'
could not be found, nothing would be written. But even then no
ClassCastException should be thrown.
Is this problem caused by the <xsl:copy-of> statements? My understand is
that I can store the nodes in variable $attribute-source using
<xsl:copy-of>. <xsl:value-of> would not help in this case, because I
need the node and not its text value.
If I run Xalan, it tells me:
================ BEGIN ====================
; SystemID: file:///path/../../stylesheet.xsl; Line#: 556; Column#: 59
javax.xml.transform.TransformerException: java.lang.ClassCastException
at
org.apache.xalan.templates.ElemValueOf.execute(ElemValueOf.java:330)
at
org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:425)
at
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:215)
at
org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:425)
at
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:215)
at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java(Compiled
Code))
at org.apache.xalan.templates.ElemIf.execute(ElemIf.java:203)
at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2318)
at org.apache.xalan.templates.ElemCopy.execute(ElemCopy.java:153)
at
org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:425)
at
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:215)
at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2318)
at
org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:699)
at
org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:425)
at
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:215)
at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2318)
at
org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java:2185)
at
org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1263)
at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:671)
at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1179)
at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1157)
at org.apache.xalan.xslt.Process.main(Process.java:1025)
---------
java.lang.ClassCastException
at
org.apache.xpath.axes.FilterExprIteratorSimple.executeFilterExpr(FilterExprIteratorSimple.java(Compiled
Code))
at
org.apache.xpath.axes.FilterExprWalker.setRoot(FilterExprWalker.java(Compiled
Code))
at
org.apache.xpath.axes.WalkingIterator.setRoot(WalkingIterator.java(Compiled
Code))
at
org.apache.xpath.axes.LocPathIterator.executeCharsToContentHandler(LocPathIterator.java:276)
at
org.apache.xalan.templates.ElemValueOf.execute(ElemValueOf.java:311)
at
org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:425)
at
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:215)
at
org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:425)
at
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:215)
at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java(Compiled
Code))
at org.apache.xalan.templates.ElemIf.execute(ElemIf.java:203)
at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2318)
at org.apache.xalan.templates.ElemCopy.execute(ElemCopy.java:153)
at
org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:425)
at
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:215)
at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2318)
at
org.apache.xalan.templates.ElemLiteralResult.execute(ElemLiteralResult.java:699)
at
org.apache.xalan.templates.ElemApplyTemplates.transformSelectedNodes(ElemApplyTemplates.java:425)
at
org.apache.xalan.templates.ElemApplyTemplates.execute(ElemApplyTemplates.java:215)
at
org.apache.xalan.transformer.TransformerImpl.executeChildTemplates(TransformerImpl.java:2318)
at
org.apache.xalan.transformer.TransformerImpl.applyTemplateToNode(TransformerImpl.java:2185)
at
org.apache.xalan.transformer.TransformerImpl.transformNode(TransformerImpl.java:1263)
at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:671)
at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1179)
at
org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.java:1157)
at org.apache.xalan.xslt.Process.main(Process.java:1025)
================= END =====================
Any idea, how to access the node stored in $attribute-source?
Thanks in advance,
Johannes