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 :

For each sur le contenu d'une balise


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Nouveau membre du Club
    Profil pro
    Technicien
    Inscrit en
    Octobre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Octobre 2007
    Messages : 16
    Points : 26
    Points
    26
    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 Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Points : 2 736
    Points
    2 736
    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, 15h28
  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, 16h18
  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, 12h15
  4. Réponses: 1
    Dernier message: 22/04/2008, 21h25
  5. Réponses: 1
    Dernier message: 15/09/2007, 17h45

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