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

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    octobre 2007
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : octobre 2007
    Messages : 15
    Points : 23
    Points
    23

    Par défaut For each sur le contenu d'une balise

    Bonjour à tous,

    Je cherche à mettre en forme un texte contenu dans une valise qui peut avoir plusieurs occurences du même texte.

    ex :

    <montest>
    En tant que client je souhaite ajouter un article dans mon panier
    En tant que client je souhaite supprimer un article de mon panier
    <montest/>

    J'aimerais pouvoir, après avoir récupérer la valeur de "montest", faire un for each pour extraire toutes les phrases commençant par "En tant que" pour les mettre dans un tableau comme ci-dessous

    Element Action
    En tant que client je souhaite ajouter un article dans mon panier
    En tant que client je souhaite supprimer un article de mon panier


    Merci pour votre aide je sèche un peu sur ce sujet

  2. #2
    Membre émérite
    Inscrit en
    octobre 2011
    Messages
    1 303
    Détails du profil
    Informations forums :
    Inscription : octobre 2011
    Messages : 1 303
    Points : 2 293
    Points
    2 293

    Par défaut

    Je ne sais quel intérêt il s'agit pour cette question comme telle. Je peux vous montrer comment faire, pas pour vous convaincre qu'on peut faire beaucoup tout de même pour ce genre de problèmes en xslt1 même : mais plutôt de montrer le raisonnement assez général pour les résoudre. Après, si vous dites je veux plutôt ceci et pas celà... je n'y répondrais pas, c'est vous qui allez le faire s'adopter une fois la façon générale soit montrée - c'est équitable.
    Code xslt : 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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    <xsl:template match="montest">
        <xsl:variable name="sig" select="'En tant que'" />
        <xsl:copy>
            <xsl:call-template name="breakup-and-process">
                <xsl:with-param name="binit" select="1" />
                <xsl:with-param name="s" select="normalize-space(.)" />
                <xsl:with-param name="sep" select="$sig" />
            </xsl:call-template>
        </xsl:copy>
    </xsl:template>
     
    <xsl:template name="breakup-and-process">
        <xsl:param name="binit" />
        <xsl:param name="s" />
        <xsl:param name="sep" />
     
        <xsl:choose>
            <xsl:when test="contains($s,$sep)">
                <xsl:if test="$binit!=1">
                    <xsl:call-template name="proc">
                        <xsl:with-param name="v" select="normalize-space(substring-before($s,$sep))" />
                        <xsl:with-param name="pref" select="$sep" />
                    </xsl:call-template>
                </xsl:if>
                <xsl:call-template name="breakup-and-process">
                    <xsl:with-param name="binit" select="0" />
                    <xsl:with-param name="s" select="substring-after($s, $sep)" />
                    <xsl:with-param name="sep" select="$sep" />
                </xsl:call-template>
            </xsl:when>
            <xsl:otherwise>
                <xsl:if test="$binit!=1">
                    <xsl:call-template name="proc">
                        <xsl:with-param name="v" select="normalize-space($s)" />
                        <xsl:with-param name="pref" select="$sep" />
                    </xsl:call-template>
                </xsl:if>
            </xsl:otherwise>
        </xsl:choose>	
    </xsl:template>
     
    <xsl:template name="proc">
        <xsl:param name="v" />
        <xsl:param name="pref" />
        <xsl:if test="$v!=''">
            <tr>
                <td><xsl:value-of select="$pref" /></td>
                <td><xsl:value-of select="$v" /></td>
            </tr>
        </xsl:if>
    </xsl:template>
    On peut faire beaucoup en manipuler les noeuds textuels en xslt, mais c'est quand même difficilement comparable à des facilités mis en disposition aux langages procéduraux comme java, c-xyz, etc... Si c'est au final bien nécessaire pour des manipulations délicates, xslt ouvrit une fenêtre d'extension pour mettre en disposition de les faire appeler - juste pour assurer qu'on sache.

Discussions similaires

  1. [Débutant] For each sur une classe hérité
    Par edmr_ps dans le forum VB.NET
    Réponses: 5
    Dernier message: 27/08/2012, 16h28
  2. [XSLT 2.0] [JAVA] for-each sur une liste
    Par benoit31 dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 05/07/2011, 17h18
  3. [AC-2003] boucle For Each sur les donnees d'une table
    Par TheRRb dans le forum VBA Access
    Réponses: 6
    Dernier message: 20/07/2009, 13h15
  4. Réponses: 1
    Dernier message: 22/04/2008, 22h25
  5. Réponses: 1
    Dernier message: 15/09/2007, 18h45

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