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 :

Est ce qu une template peut renvoyer une valeur pour etre utiliser dans la template apellante


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mai 2004
    Messages
    92
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 92
    Points : 35
    Points
    35
    Par défaut Est ce qu une template peut renvoyer une valeur pour etre utiliser dans la template apellante
    Bonjour,

    Je suis nouveau en xslt,
    D apres ma comprehension des choses, une template peut etre utliser comme fonction et aussi une template peut apeller une autre template

    J ai cree une premier fonction (template1) qui fait appel dans une for-each a une seconde fonction (template 2)

    je veux que ma template 1 fasse la somme des resultat renvoyer par chacun des appel a ma template 2

    C est un peu pres ce que je veux parvenir a faire

    int fct1($noeud)
    {
    int total = 0;
    foreach($noeud)
    {
    total = total + fct2(@champ)
    }
    return total
    }

    Y a t il un moyen de faire ca ?

    Merci

    Arioule

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Pas facilement. Il faut que le template 1 soit récursif et prenne en paramètre :
    - l'ensemble des nœuds
    - l'index du prochain nœud à analyser dans l'ensemble des nœuds
    - la somme calculée à partir des nœuds déjà analysés.

    Quand l'index dépasse la taille de l'ensemble de nœuds, on renvoie le résultat :

    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
    <xsl:template name="template1">
      <xsl:param name="noeuds"/>
      <xsl:param name="position" select="1"/>
      <xsl:param name="total" select="0"/>
     
      <xsl:variable name="ce_noeud" select="$noeuds[$position]"/>
      <xsl:choose>
        <xsl:when test="$ce_noeud">
          <!-- Si $ce_noeud existe, c'est que $position est encore dans l'ensemble -->
          <!-- calcul sur ce nœud -->
          <xsl:variable name="valeur_ce_noeud">
            <xsl:call-template name="template2">
               <xsl:with-param name="noeud" select="$ce_noeud"/>
            </xsl:call-template>
          </xsl:variable>
     
          <!-- Appel récursif -->
          <xsl:call-template name="template1">
            <xsl:with-param name="noeuds" select="$noeuds"/>
            <xsl:with-param name="position" select="$position + 1"/>
            <xsl:with-param name="total" select="$total + $valeur_ce_noeud"/>
          </xsl:call-template>
        </xsl:when>
        <xsl:otherwise>
          <!-- On a parcouru tous les nœuds : montrer le résultat -->
          <xsl:value-of select="$total"/>
        </xsl:otherwise>
      </xsl:choose>
    </xsl:template>
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Réponses: 3
    Dernier message: 26/02/2014, 12h20
  2. Réponses: 10
    Dernier message: 05/08/2010, 12h02
  3. Réponses: 2
    Dernier message: 25/11/2008, 10h02
  4. Réponses: 8
    Dernier message: 06/04/2006, 18h45
  5. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 21h24

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