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 - Boucler sur des éléments uniques


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2018
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2018
    Messages : 1
    Par défaut XSLT - Boucler sur des éléments uniques
    Hello,

    J'ai le XML ci-dessous. J'ai besoin de créer une boucle qui va faire autant d'occurrence qu'il y a de SDQ dont elemID = '67'.

    Donc dans le cas du XML ci dessous, j'aurais une boucle de 6 occurrences. 0001,0003,0004,0005,0006,0024

    Je travaille avec une map XSLT 1.0 J'avais pensé utilisé la notion de key pour à la fois trouver les numéro uniques et ensuite boucler sur cette liste avec un for-each

    Quelqu'un aurait une idée de comment ça pourrait se faire ?

    Merci d'avance.

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <Message>
    <M850 standard="NM" version="NA" release="UNKNOWN" message="MESSAGE">
    <TrnsGrp>
    <ST>
    <ST_01 elemId="143">850</ST_01>
    <ST_02 elemId="329">0005</ST_02>
    </ST>
    <PO1Loop>
    <PO1>
    <PO1_01 elemId="350">1</PO1_01>
    <PO1_02 elemId="380">5</PO1_02>
    <PO1_03 elemId="355">EA</PO1_03>
    <PO1_04 elemId="212">16</PO1_04>
    <PO1_05 elemId="639">WE</PO1_05>
    <PO1_06 elemId="235">EN</PO1_06>
    <PO1_07 elemId="234">3361109604825</PO1_07>
    <PO1_08 elemId="235">CG</PO1_08>
    <PO1_09 elemId="234">90</PO1_09>
    </PO1>
    <SDQ>
    <SDQ_01 elemId="355">EA</SDQ_01>
    <SDQ_02 elemId="66">92</SDQ_02>
    <SDQ_03 elemId="67">0001</SDQ_03>
    <SDQ_04 elemId="380">1</SDQ_04>
    <SDQ_05 elemId="67">0004</SDQ_05>
    <SDQ_06 elemId="380">1</SDQ_06>
    <SDQ_07 elemId="67">0005</SDQ_07>
    <SDQ_08 elemId="380">1</SDQ_08>
    <SDQ_09 elemId="67">0006</SDQ_09>
    <SDQ_10 elemId="380">1</SDQ_10>
    <SDQ_11 elemId="67">0024</SDQ_11>
    <SDQ_12 elemId="380">1</SDQ_12>
    </SDQ>
    </PO1Loop>
    <PO1Loop>
    <PO1>
    <PO1_01 elemId="350">1</PO1_01>
    <PO1_02 elemId="380">5</PO1_02>
    <PO1_03 elemId="355">EA</PO1_03>
    <PO1_04 elemId="212">16</PO1_04>
    <PO1_05 elemId="639">WE</PO1_05>
    <PO1_06 elemId="235">EN</PO1_06>
    <PO1_07 elemId="234">3361109604825</PO1_07>
    <PO1_08 elemId="235">CG</PO1_08>
    <PO1_09 elemId="234">90</PO1_09>
    </PO1>
    <SDQ>
    <SDQ_01 elemId="355">EA</SDQ_01>
    <SDQ_02 elemId="66">92</SDQ_02>
    <SDQ_03 elemId="67">0001</SDQ_03>
    <SDQ_04 elemId="380">1</SDQ_04>
    <SDQ_05 elemId="67">0003</SDQ_05>
    <SDQ_06 elemId="380">1</SDQ_06>
    <SDQ_07 elemId="67">0005</SDQ_07>
    <SDQ_08 elemId="380">1</SDQ_08>
    <SDQ_09 elemId="67">0006</SDQ_09>
    <SDQ_10 elemId="380">1</SDQ_10>
    <SDQ_11 elemId="67">0024</SDQ_11>
    <SDQ_12 elemId="380">1</SDQ_12>
    </SDQ>
    </PO1Loop>
    <CTTLoop>
    <CTT>
    <CTT_01 elemId="354">3</CTT_01>
    </CTT>
    </CTTLoop>
    <SE>
    <SE_01 elemId="96">21</SE_01>
    <SE_02 elemId="329">0005</SE_02>
    </SE>
    </TrnsGrp>
    </M850>
    </Message>

  2. #2
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    J'ai besoin de créer une boucle qui va faire autant d'occurrence qu'il y a de SDQ dont elemID = '67'.
    Donc dans le cas du XML ci dessous, j'aurais une boucle de 6 occurrences. 0001,0003,0004,0005,0006,0024
    Si on regard le xml, il y a dix occurrences pour elemId dont quatre se répètent. Donc, la question souhait précisément pas seulement l'unicité de l'attribut elemId mais aussi le contenu textuel et en même temps. L'utilisation d'une clé ou plusieurs, si nécessaire, serait pertinente dans ce cas, c'est vrai.

    On peut faire comme ça - j'ai utilisé un séparateur '=++=' bien arbitraire dans l'attribut @use pour faire un @use complexe, quelque particule à condition qu'elle n'a pratiquement zéro chance d'apparaître dans elemId et text() serait bonne.
    Code xslt : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <xsl:key name="elemIdTextKey" match="//*[@elemId]" use="concat(@elemId, '=++=', normalize-space())" />
    <xsl:template match="/">
        <resultats>
            <xsl:for-each select="//*[@elemId][generate-id()=generate-id(key('elemIdTextKey', concat(@elemId, '=++=', normalize-space()))[1])]">
                <xsl:sort select="@elemId" order="ascending" data-type="number" />
                <xsl:sort select="normalize-space()" order="ascending" data-type="text" />
                <texte elemId="{@elemId}">
                    <!-- xsl:copy-of select="." / -->
                    <xsl:value-of select="normalize-space()" />
                </texte>
            </xsl:for-each>
        </resultats>
    </xsl:template>
    Voilà !

Discussions similaires

  1. boucler sur des éléments de formulaire
    Par cedrick21 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 12/02/2010, 11h09
  2. [XSLT] boucler sur des attributs
    Par damyrid dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 30/03/2006, 10h43
  3. Boucler sur des champs texte
    Par syl2095 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/11/2004, 16h15
  4. boucler sur des checkboxes
    Par El Saigneur dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 09/10/2004, 08h27
  5. [VB6] Comment boucler sur des controls d'un form ?
    Par lankviller dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 27/01/2003, 16h29

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