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 :

[XSLT] Calcul entre deux noeuds, résultat dans un autre noeud


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 128
    Points : 61
    Points
    61
    Par défaut [XSLT] Calcul entre deux noeuds, résultat dans un autre noeud
    Salut à tous,

    Je bloque sur une division entre 2 noeuds de même niveau (v1 / v2), je dois placer le résultat dans un noeud également au même niveau (resultat).

    Voici mon xml de base simplifié :

    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
     
     
    <yyy>
          <zzz>
    	    <resultat></resultat>
    	    <v1>9</v1>
                <v2>3</v2>
     
         </zzz>
          <zzz>
    	        <resultat></resultat>
    	        <v1>10</v1>
                    <v2>2</v2>
         </zzz>
     
    </yyy>
    mon xsl entier :

    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
     
    <?xml version="1.0" encoding="iso-8859-1"?>
     
    <xsl:stylesheet version="2.0" 
    	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    >
     
     
     
    	<xsl:output method="xml" indent="yes"/>
     
     
    	<!-- on reprend la structure de l'xml -->
    	<xsl:template match="@* | node()" priority="1">
    		<xsl:copy>
    			<xsl:apply-templates select="@* | node()"/>
    		</xsl:copy>
    	</xsl:template>
     
    		<!-- on remplace le noeud résultat par le calcul entre v1 et v2 -->
    	<xsl:template match="zzz" priority="2">
    		<xsl:variable name="division" select="v1 div v2" />
    			<xsl:element name="resultat">
    			<xsl:value-of select="$division"/>
    	</xsl:element>
    	</xsl:template>
     
     
     
    </xsl:stylesheet>
    Là il me renvoit juste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?xml version="1.0" encoding="UTF-8"?>
    <yyy>
          <resultat>3</resultat>
          <resultat>5</resultat>
    </yyy>
    Au lieu de :
    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
     
     
    <yyy>
          <zzz>
    	    <resultat>3</resultat>
    	    <v1>9</v1>
                <v2>3</v2>
     
         </zzz>
          <zzz>
    	        <resultat>5</resultat>
    	        <v1>10</v1>
                    <v2>2</v2>
         </zzz>
     
    </yyy>
    Visiblement le template calcul écrase le template de réplication, je ne vois vraiment pas comment juste calculer et en plus pouvoir modifier le champ résultat en xsl :/
    Quelqu'un aurait une idée ?

    Par avance merci !

  2. #2
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <xsl:template match="zzz" priority="2">
    		<xsl:variable name="division" select="v1 div v2" />
    			<xsl:element name="resultat">
    			<xsl:value-of select="$division"/>
    	</xsl:element>
    <xsl:apply-templates select="@* | node()[name()!='resultat']"/>
    </xsl:template>
    mais un code vraiment propre serait d'enlever le template zzz et de le remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <xsl:template match="resultat" >
    		<xsl:variable name="division" select="../v1 div ../v2" />
    			<xsl:copy>
    			<xsl:value-of select="$division"/>
    	</xsl:copy>
    </xsl:template>

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    128
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 128
    Points : 61
    Points
    61
    Par défaut
    Un grand merci beaucoup pour ta réponse !
    Il manquait juste un petit truc pour que le node "zzz" soit pas supprimé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <xsl:template match="zzz" priority="2">
    <xsl:element name="zzz">
    		<xsl:variable name="division" select="v1 div v2" />
    			<xsl:element name="resultat">
    			<xsl:value-of select="$division"/>
    	</xsl:element>
    <xsl:apply-templates select="@* | node()[name()!='resultat']"/>
    </xsl:element>
    </xsl:template>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/08/2012, 18h41
  2. [AC-2010] comment calculer entre deux limites dans access 2010
    Par ziboua dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 28/12/2010, 21h49
  3. calcul entre deux champs dans une table
    Par pomar dans le forum Access
    Réponses: 7
    Dernier message: 29/11/2006, 19h27
  4. [Date] Calcul entre deux dates
    Par djodjo dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 14/09/2006, 15h32
  5. Calcul entre deux dates heures
    Par Isa31 dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 31/03/2005, 14h17

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