Kommas durch Punkt ersetzen
ssiedlerin268
- xsl
Ich brauche nochmals eure Hilfe:
Ich habe folgende Summenzeile:
<xsl:variable name="habens" select="sum(key('groupby2',Feld[@Name='KZ DEB/KRED.'])[Feld='K']/Feld[@Name = 'SALDO'])" />
Das klappt auch alles wunderbar, bis zu dem Punkt, wo Nachkommastellen mit ins Spiel kommen. Diese sind in der XML-Datei jedoch als Komma ausgezeichnet, aber ein Punkt ist ja nötig. Wie kann ich denn jetzt hier die Translate-Funktion mit einbauen ?
Liebe Grüße
Hi!
Ich habe folgende Summenzeile:
<xsl:variable name="habens" select="sum(key('groupby2',Feld[@Name='KZ DEB/KRED.'])[Feld='K']/Feld[@Name = 'SALDO'])" />
Tja, eigentlich wäre die "logische" Lösung:
sum(translate(key('groupby2',Feld[@Name='KZ DEB/KRED.'])[Feld='K']/Feld[@Name = 'SALDO'],',','.'))
Das funktioniert aber nicht, weil der xslt Prozessor da nicht mitspielt.
Deshalb wird eine umständlichere Lösung erforderlich.
Ich ersetze der Einfachheit halber in der Knotenstruktur:
//k == key('groupby2',Feld[@Name='KZ DEB/KRED.'])[Feld='K']/Feld[@Name = 'SALDO']
Also Any.xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="./Summe.xsl"?>
<document>
<k>1,1</k>
<k>2,1</k>
<k>4,1</k>
</document>
und dann Summe.xsl:
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<head>
<title>addition</title>
</head>
<body>
<p><xsl:value-of select="sum(translate(//k,',','.'))" /></p>
<xsl:call-template name="schleife">
<xsl:with-param name="Zaehler" select="1" />
<xsl:with-param name="Addition" select="number(0)" />
</xsl:call-template>
</body>
</html>
</xsl:template>
<xsl:template name="schleife">
<xsl:param name="Zaehler" />
<xsl:param name="Addition" />
<xsl:choose>
<xsl:when test="$Zaehler <= count(//k)">
<xsl:variable name="einWert" select="number(translate(//k[position()=$Zaehler],',','.'))" />
<p>till now: <xsl:value-of select="$Addition"/></p>
<p>new: <xsl:value-of select="$einWert"/></p>
<xsl:call-template name="schleife">
<xsl:with-param name="Zaehler" select="$Zaehler + 1" />
<xsl:with-param name="Addition" select="$Addition + $einWert" />
</xsl:call-template>
</xsl:when>
<xsl:otherwise>
<p>result: <xsl:value-of select="$Addition"/></p>
</xsl:otherwise>
</xsl:choose>
</xsl:template>
</xsl:stylesheet>
Es mag sein, dass es einfacher geht, aber das stellt eine Lösung dar.
Grüße,
Richard
Die Zeile funktioniert (wie bereits im Posting angekündigt) nicht und muß entfernt werden, damit es geht:
<p><xsl:value-of select="sum(translate(//k,',','.'))" /></p>
Hallo,
Ich habe folgende Summenzeile:
<xsl:variable name="habens" select="sum(key('groupby2',Feld[@Name='KZ DEB/KRED.'])[Feld='K']/Feld[@Name = 'SALDO'])" />
Das klappt auch alles wunderbar, bis zu dem Punkt, wo Nachkommastellen mit ins Spiel kommen. Diese sind in der XML-Datei jedoch als Komma ausgezeichnet, aber ein Punkt ist ja nötig. Wie kann ich denn jetzt hier die Translate-Funktion mit einbauen ?
Da ich in deinen früheren Postings gesehen habe, dass du XSLT 2.0 verwendest, kannst du das so machen:
<xsl:variable name="habens" select="sum(key('groupby2',Feld[@Name='KZ DEB/KRED.'])[Feld='K']/number(translate(Feld[@Name = 'SALDO']], ',', '.')))" />
Grüße
Thomas