ritschmanhard: Kommas durch Punkt ersetzen

Beitrag lesen

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 &lt;= 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