Bonjour à tous,

Je débute avec XSLT et je n'arrive pas à insérer un séparteur de millier à mes valeurs contenues dans mon XML. Ce que j'ai trouvé comme "solution" ne fonctionne pas avec mes valeurs XML, simplement avec un nombre définit, en plus je n'arrive qu'a avoir un séparateur "," alors que je voudrai un espace simple " ".

Voila mon XML :

<?xml version="1.0" encoding="utf-8" standalone="no" ?>
<?DOCTYPE root SYSTEM "test.dtd"?>
<?xml-stylesheet type="text/xsl" href="test.xslt"?>
<root>
  <test>
    <mon_nombre>43564</mon_nombre>  
  </test>
 <test>
    <mon_nombre>1235466654</mon_nombre>  
  </test>
 
</root>



voila test.xslt (qui ne fonctionne pas du tout):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
  <xsl:output method="html" />
  <xsl:template match="/">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>Document sans titre</title>
    </head>
    <body>
    <ul>
      <xsl:for-each select="root/test">
       <li><xsl:value-of select='format-number(mon_nombre, "###,###")' />
</li>
      </xsl:for-each>
    </ul>
    </body>
    </html>
  </xsl:template>
</xsl:stylesheet>


et test.dtd :

<?xml version="1.0" encoding="utf-8" ?>

<!ELEMENT root (test+)>
<!ELEMENT test (mon_nombre)>
<!ELEMENT mon_nombre ( #PCDATA )>


Merci pour votre aide.
Bonsoir Teeko,

Aprés avoir créé les trois fichiers de ton exemple et les avoir ouvert sous Opera, j'ai obtenu le résultat suivant :

43,564
1,235,466,654


Aprés m'être renseigné sur format-number, j'ai trouvé ceci à propos du second argument (format) :

w3schools a écrit :
Specifies the format pattern. Here are some of the characters used in the formatting pattern:
# (Denotes a digit. Example: ####)
0 (Denotes leading and following zeros. Example: 0000.00)
. (The position of the decimal point Example: ###.##)
, (The group separator for thousands. Example: ###,###.##)
% (Displays the number as a percentage. Example: ##%)
; (Pattern separator. The first pattern will be used for positive numbers and the second for negative numbers)


Source : XSLT format-number() Function

Ce qu'il faut comprendre par là, c'est que les caractères pouvant être utilisés ne sont pas libres, et font partie d'un ensemble prédeterminé.

Pour obtenir le formatage que tu souhaite, il faudra passer par une autre fonction ou une autre solution.

J'ai testé avec une instruction du genre ...

<xsl:decimal-format
   name="european"
   decimal-separator=","
   grouping-separator="." />


... placée directement sous xsl:style-sheet (car cet élément est un "top-level element"), et en faisant varier les paramètres de formatage, comme suggéré dans Fonction format-number (MSDN), mais sans succès, en tous les cas sous mon navigateur.

Même si je ne suis pas parvenu au résultat que tu souhaite, c'est peut-être chez moi aussi un problème de processeur XSLT (celui d'Opera). Cette piste de xsl:decimal-format me semble la plus prometeuse.

Tu trouvera plus de détails à son sujet ici : XSLT <xsl:decimal-format> Element

w3schools a écrit :
<xsl:decimal-format
name="name"
decimal-separator="char"
grouping-separator="char"
infinity="string"
minus-sign="char"
NaN="string"
percent="char"
per-mille="char"
zero-digit="char"
digit="char"
pattern-separator="char"/>


Bon courage pour la suite

Modifié par hibou57 (22 Apr 2009 - 01:16)