2016-04-22 9 views
1

die XML Gegeben:Konvertieren 6,5 Anzahl in XSL

<quest> 
    <g_1> 
    <name>first</name> 
    <value>4,5</value> 
    </g_1> 
    <g_2> 
    <name>first</name> 
    <value>4,5</value> 
    </g_2> 
</quest> 

Wie kann ich mit Wert als Zahl in xsl arbeiten, ohne zu konvertieren mit übersetzen, zu. ?

<xsl:value-of select="sum(number(translate(current-group()/VALUE[.!=''],',','.')))" /> 

Dies wird funktionieren, aber ich mag die Lösung nicht. Ich kann nicht umhin zu glauben, dass es eine Funktion gibt, zum Beispiel einen Parameter der Funktion number() hinzufügen, die das ',' als Dezimaltrennzeichen angibt, während das Eingabegebietsschema der Zeichenfolge konvertiert oder spezifiziert wird.

Ich kann die meisten Funktionen nicht verwenden, weil das 6,5 offensichtlich noch keine gültige Zahlennotation ist.

Danke!

+0

'translate (current-group()/VALUE [.! = ''], ',', '.')' Sollte einen Fehler geben, sobald es mehr als einen 'VALUE' gibt. Ich denke du willst lieber 'current-group()/VALUE [.! = '']/Translate (., ',', '.')'. –

+0

Danke für die Warnung, ich werde deine Empfehlung hinzufügen, obwohl ich eher nicht auf Übersetzung angewiesen bin, um meine 6,5 in eine Zahl umzuwandeln. – ReijMan

+0

Eine Zeichenfolge, die andere Zeichen als Ziffern enthält, der Dezimalpunkt und das Minuszeichen können nicht in eine Zahl konvertiert werden. Sie ** müssen ** anfangen, indem Sie das Dezimalkomma zu einem Punkt ändern. –

Antwort

0

Es gibt keine Parameter zu number oder xs:double oder xs:decimal, um Zahlen mit einem anderen Format zu analysieren. Sie müssen also zuerst eine Zeichenfolgenfunktion verwenden, um das richtige Format zu erhalten, unabhängig davon, ob das translate oder replace Ihnen überlassen ist.