oli-87

XSL-Transformation-Problem (XRTreeFrag cannot be cast to)

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 folgende 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>

Das wirkliche XML und die Rechnung sehen 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
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 280465

Url: https://administrator.de/forum/xsl-transformation-problem-xrtreefrag-cannot-be-cast-to-280465.html

Ausgedruckt am: 17.05.2025 um 09:05 Uhr

114757
114757 18.08.2015 aktualisiert um 12:44:57 Uhr
Goto Top
Moin,
XSLT 2.0
<?xml version="1.0" encoding="UTF-8"?>  
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema">  
	<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>  
			<xsl:template match="/root/Ebene1/Ebene2">  
			<root>
				<xsl:for-each select="Position">  
						<wert>
							<xsl:value-of select="((@netPrice * @percent) div 100)"/>								  
						</wert>
				</xsl:for-each>
				<total>
					<xsl:value-of select="sum(for $i in Position return ($i/@netPrice * $i/@percent) div 100)"/>  
				</total>
			</root>
		</xsl:template>
</xsl:stylesheet>
Gruß jodel32