2010-02-23 6 views
1

Nous devons transformer du XML contenant des nombres en notation exposant (scientifique) par exemple.XSLT: Gestion des valeurs numériques utilisant la notation exponentielle

 
    <Value>12.34e12</Value> 
    <Value>-12.34e-12</Value> 

plutôt fâcheusement, nous ne pouvons pas utiliser la fonction somme() et autres parce que l'analyseur XSLT attend nombres d'être au format décimal.

[Nous utilisons la .Net classe XslCompiledTransform pour faire la transformation, mais je pense que ce problème est commun à toutes les implémentations XSLT]

La seule solution à ce problème que nous avons à ce jour est de transformer la valeur de chaîne à un nombre en utilisant une fonction javascript (voir ci-dessous), puis écrire notre propre modèle de somme qui appelle cette fonction.

Il me semble qu'il doit y avoir un meilleur moyen - est-il?

 
/* 
This function attempts to coerce the input into a number. 
*/ 
function toNumber(x) { 
if(!x) { 
    return Number.NaN; 
} 
if(typeof x === 'number') { 
    return x; 
} 
return parseFloat(x); 
}; 

Répondre

-1

Saxon-B 9.0.0.6 fonctionne bien ici. Sorties 0.

EDIT: Maintenant, je vois que Saxon 6 (processeur seulement pour xslt 1.0) renvoie NaN. Mais si vous essayez xslt 2.0, vous ne voudrez plus rien d'autre. :-)

XML:

<?xml version="1.0" encoding="UTF-8"?> 
<root> 
    <Value>12.34e12</Value> 
    <Value>-12.34e12</Value> 
</root> 

XSLT:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
<xsl:template match="root"> 
    <xsl:value-of select="sum(Value)"/> 
</xsl:template> 
</xsl:stylesheet> 
+0

Merci pour la réponse. Malheureusement, je suis bloqué avec les classes de transformation .Net qui (pour autant que je sache) sont XSLT 1.0. :-( –

+0

Saxon devrait fonctionner sur .net bien que j'aie seulement utilisé la version de Java – Krab

+0

Xalan 2.7 fonctionne également bien. – Erlock

Questions connexes