ssiedlerin268: Kommas durch Punkt ersetzen

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

  1. 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

    1. 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>

  2. 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