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] Boucles imbriquées


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre confirmé
    [XSLT] Boucles imbriquées
    Bonjour tout le monde,

    Après avoir posé une question dont la résolution implique une version qui n'est pas encore implémentée depuis bien huit ans que la question émerge de temps à autre, me voilà maintenant avec une question beaucoup plus basique.

    Prenons un exemple :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    -<member name="The.Name.Of.A.Certain.Method">
    <summary>A description of the method</summary>
    <param name="cpService" type="ICPService"/>
    <param name="logger" type="ILoggerManager"/>
    <param name="configuration" type="IConfiguration"/>
    </member>


    J'ai un objet en un certain nombre d'occurrences (member), et pour chaque occurrence un autre objet qui peut aussi exister en plusieurs occurrences (param).

    J'ai obtenu la liste des objets member, à l'aide de
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
            <xsl:for-each select="/doc/members/member">


    mais maintenant, je sèche pour afficher, pour chaque member, la liste de ses param.

    Facile, en principe ?
    (Gloops, Gluups ... c'est un peu pareil)

  2. #2
    Membre confirmé
    Bon, il faut croire que ça devait me démanger de poser la question, puisqu'en définitive, une deuxième boucle <xsl:for-each> à l'intérieur de la première, ça ne pose guère de problème, surtout pour afficher juste les paramètres.

    ça se gâte quand je veux afficher ça dans une deuxième colonne d'un tableau HTML, car je dois fermer l'objet td et le rouvrir avant de fermer l'objet xsl:for-each, et XSLT n'aime pas ça.
    Tant pis, j'ai l'impression que je vais mettre une cellule vide à droite du titre paramètres, comme ça en dessous je pourrai mettre une ligne par paramètre.

    Meilleure idée ?
    (Gloops, Gluups ... c'est un peu pareil)

  3. #3
    Modérateur

    C'est pas bien clair sans exemple, malheureusement.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre actif
    Comme le dit Thelvin...

    1/ exemple XML
    2/ ton essai XSLT
    3/ ce que tu attendais

    parce-que là pour comprendre ce que tu veux faire, tu facilites pas le travail ^^
    "Chuck Norris a déjà compté jusqu'à l'infini. Deux fois."

  5. #5
    Membre confirmé
    OK OK.
    J'avais une ligne de titre pour annoncer les paramètres, en colspan="2", suivie d'une ligne par paramètre, avec une cellule vide à gauche et le détail du paramètre à droite.
    Sur la feuille de style XSLT ça donnait ça :
    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
                  <tr>
                    <td colspan="2">
                      Parameters (see following lines, if any : lines with blank cell at left)
                    </td>
                  </tr>
                    <xsl:for-each select="param">
                      <tr>
                        <td></td>
                        <td>
                          * <xsl:value-of select="@name" /> - 
                          <xsl:value-of select="@type" />
                        </td>
                      </tr>
                    </xsl:for-each>
                <tr>


    Finalement, je me suis rendu compte que c'était à la fois plus lisible et plus simple à réaliser de présenter tous les caractères dans la même cellule.

    Alors, ça donne ça :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
                  <tr>
                    <td style="vertical-align: text-top;">
                      Parameters
                    </td>
                    <td>
                    <xsl:for-each select="param">
                          * <xsl:value-of select="@name" />
                          <xsl:if test="@type!=''"> - type :
                          <xsl:value-of select="@type" /></xsl:if><br />
                    </xsl:for-each>
                    </td>
                </tr>
    (Gloops, Gluups ... c'est un peu pareil)

###raw>template_hook.ano_emploi###