Oliver Schmidt: XSL-Transformation-Problem (XRTreeFrag cannot be cast to)

Beitrag lesen

Hallo und einen schönen guten Abend,

ich hänge hier gerade an einer Anforderung und komme absolut nicht weiter. Ich versuche mit XSL 1.0 (FOP-Prozessor) eine Liste von Positionen zu errechnen, leider bekomme ich oben genannte Fehlermeldung:

javax.xml.transform.TransformerException: org.apache.xpath.objects.XRTreeFrag cannot be cast to org.apache.xpath.objects.XNodeSet

Ich habe folgendes XML (Auszug):

<root>
	<Ebene1>
		<Ebene2>
			<Position netPrice="1000" percent="2"/>
			<Position netPrice="2000" percent="4"/>
			<Position netPrice="3000" percent="2"/>
			<Position netPrice="6000" percent="1"/>
			<Position netPrice="2000" percent="2"/>
		</Ebene2>
	</Ebene1>
</root>

Die Rechnung sieht ein wenig komplizierter aus, aber ich habe die Transformation ein wenig vereinfacht. Der Fehler besteht weiterhin. Hier der XSL-Auszug, der den Fehler verursacht:

<xsl:variable name="liste">
	<xsl:for-each select="root/Ebene1/Ebene2" >
		<xsl:variable name="temp" select="((@netPrice * @percent) div 100)" />
			<xs:element type="xs:integer"><xsl:value-of select="$temp" /></xs:element>
	</xsl:for-each>
</xsl:variable>

<xsl:variable name="all" >
		<xsl:value-of select="sum($liste/*)" />
</xsl:variable>

Normalerweise würde ich erwarten, dass das Ergebnis 260 ist, da er jede Zeile einzeln addiert und zum Schluss die Summe bildet.

1000 x 2 / 100 = 20

2000 x 4 / 100 = 80

3000 x 2 / 100 = 60

6000 x 1 / 100 = 60

2000 x 2 / 100 = 40

Summe = 260

Ich könnte das Ergebnis auch so berechnen:

0,1x(A1xB1+A2xB2+A3xB3+A4xB4+A5xB5)

Aber leider ändert sich das XML jedes mal, sodass ich die Anzahl der Reihen noch nicht kenne.

Ich wäre über jeden Lösungsansatz dankbar.

Lieben Gruß und vielen Dank

Oli