IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XSL/XSLT/XPATH XML Discussion :

pb sum avec string


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 14
    Points : 9
    Points
    9
    Par défaut pb sum avec string
    Bonjour,

    Je n'arrive pas à faire un sum() avec ce fichier xml :

    <option>
    <prix>1 530,00</prix>
    </option>
    <option>
    <prix>20,00</prix>
    <option>

    J'arrive a mettre mes string au bon format (j'enlève les blancs et remplace les virgules par les points) :
    <xsl:value-of select="translate(translate(prix,' ',''),',','.')"/>
    ça me donne : 1530.00 et 20.00 (ce qui ressemble plus à des données numériques xsl)

    Par contre, si je fais:
    <xsl:value-of select="sum(option/translate(translate(prix,' ',''),',','.'))/>

    il ne veut pas car il interprète translate comme le nom d'un noeud.

    Y-a-t-il une solution du genre :
    <xsl:value-of select="sum(option/prix[translate(translate(./prix,' ',''),',','.')])/> (ça marche pas... )

    ou faut-il passer par des templates avec paramètre qui modifie dans un premier temps le format et ensuite faire le sum ? je ne maitrise pas encore bien, si quelqu'un a une idée ?

    Merci

  2. #2
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    Une ch'tiote recherche sur le forum : http://www.developpez.net/forums/vie...=virgule+somme
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    merci GrandFather !

    mais j'ai du mal à adapter pour mon cas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <constitution>
    <options>
    <option> 
    <prix>1 530,00</prix> 
    </option> 
    <option> 
    <prix>20,00</prix> 
    <option> 
    </options>
    </constitution>
    ça me donne un truc du genre (mais ça ne marche pas) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    	<xsl:template match="constitution/options/" mode="somme-options">	
    		<row>
    			<col width="140" class="tableLabel" >Options</col>
    			<col width="380" class="evenLineL">Sous-total</col>
    			<col width="100%" class="evenLineL">
    			<xsl:variable name="total_compte"> 
            	   <xsl:call-template name="somme"> 
            	   	<xsl:with-param name="noeuds" select="option"/> 
            	    <xsl:with-param name="attribut" select="option/prix"/> 
           		   </xsl:call-template> 
    			</xsl:variable> 
    			<xsl:value-of select="translate($total_compte, '.', ',')"/> 
    			</col>						
    		</row>
    	</xsl:template>
     
    	<xsl:template name="somme"> 
       		<xsl:param name="total" select="0"/> 
       		<xsl:param name="noeuds"/> 
    		<xsl:param name="attribut"/> 
    	    <xsl:choose> 
    	     <xsl:when test="$noeuds"> 
        	    <xsl:call-template name="somme"> 
           		   <xsl:with-param name="total" select="$total + number(translate(translate(($noeuds[1]/@*[name()=$attribut], ',', '.'),' ',''))"/> 
    	           <xsl:with-param name="noeuds" select="$noeuds/following-sibling::*[1]"/> 
    		       <xsl:with-param name="attribut" select="$attribut"/>          
           		</xsl:call-template> 
    	      </xsl:when> 
             <xsl:otherwise> 
        	    <xsl:value-of select="$total"/> 
          	 </xsl:otherwise> 
            </xsl:choose> 
    	</xsl:template>
    Je ne comprend pas cette opération en fait :
    $b-option[1]/@*[name()=$attribut]

    pour infos, l'erreur que je récupère :

    javax.xml.transform.TransformerException: Un test de noeud correspondant à NCName:* ou QName était attendu.
    at java.lang.Throwable.<init>(Throwable.java)

    Patrick

  4. #4
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Il faut légèrement adapter (et simplifier) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
       <xsl:template match="constitution/options" mode="somme-options">    
          <row> 
             <col width="140" class="tableLabel" >Options</col> 
             <col width="380" class="evenLineL">Sous-total</col> 
             <col width="100%" class="evenLineL"> 
             <xsl:variable name="total_compte"> 
                  <xsl:call-template name="somme"> 
                     <xsl:with-param name="noeud" select="option[1]"/> 
                    </xsl:call-template> 
             </xsl:variable> 
             <xsl:value-of select="translate($total_compte, '.', ',')"/> 
             </col>                   
          </row> 
       </xsl:template> 
     
       <xsl:template name="somme"> 
             <xsl:param name="total" select="0"/> 
             <xsl:param name="noeud"/> 
           <xsl:choose> 
            <xsl:when test="$noeud"> 
               <xsl:call-template name="somme"> 
                    <xsl:with-param name="total" select="$total + number(translate($noeud/prix, ', ', '.'))"/> 
                  <xsl:with-param name="noeud" select="$noeud/following-sibling::option[1]"/> 
                 </xsl:call-template> 
             </xsl:when> 
             <xsl:otherwise> 
               <xsl:value-of select="$total"/> 
              </xsl:otherwise> 
            </xsl:choose> 
       </xsl:template>
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  5. #5
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    arff...je n'y arrive pas..

    j'ai simplifé mon xml, il est un peu plus compliqué et j'ai l'impression que l'erreur vient de là.

    <constitution>
    <options>
    <option>
    <caracteristique>hgthfgdh</caracteristique>
    ...
    <prix>1 530,00</prix>
    <devise>EUR</devise>
    </option>
    <option>
    <caracteristique>zerzioejfeiozfj</caracteristique>
    ...
    <prix>20,00</prix>
    <devise>EUR</devise>
    <option>
    </options>
    </constitution>

    en tout cas merci grandfather, je nage un peu là...

    toujours la même erreur Un test de noeud correspondant à NCName:* ou QName était attendu.

    je suis sur xalan sinon....

  6. #6
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Tu es sûr que cette erreur concerne cette partie du code ?
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  7. #7
    Futur Membre du Club
    Inscrit en
    Avril 2006
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    c'est bien à ce moment là oui...

    Bon...la nuit me portera peu etre conseil

    merci

Discussions similaires

  1. [RegEx]Probleme avec String.split
    Par sebastieng dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 09/02/2006, 21h24
  2. Erreur compilation avec <string>
    Par seal3 dans le forum SL & STL
    Réponses: 9
    Dernier message: 25/08/2005, 20h41
  3. SUM avec firebird / interbase
    Par Jeankiki dans le forum InterBase
    Réponses: 5
    Dernier message: 28/10/2004, 23h13
  4. sum avec des nombres avec virgule
    Par Bruno2000 dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 30/09/2004, 15h01
  5. [Struts][logic:iterate] Probleme avec String
    Par julienOriano dans le forum Struts 1
    Réponses: 7
    Dernier message: 15/06/2004, 09h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo