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 :

Utilisation de condition dans une boucle for-each


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2009
    Messages : 311
    Points : 127
    Points
    127
    Par défaut Utilisation de condition dans une boucle for-each
    Bonjour,

    Voila je voulais savoir s'il était possible d'utiliser une condition if dans une bouclke for-each en XML !!?

    plus précisemment, j'ai mon fichier XML ;

    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
    30
    31
    32
    33
    34
    35
    36
     
    <OtherInvoiceReferences>
    			<core:ReferenceCoded>
    				<core:ReferenceTypeCoded>[4]</core:ReferenceTypeCoded>
    				<core:PrimaryReference>
    					<core:RefNum>[5]</core:RefNum>
    				</core:PrimaryReference>
    			</core:ReferenceCoded>
    			<core:ReferenceCoded>
    				<core:ReferenceTypeCoded>[6]</core:ReferenceTypeCoded>
    				<core:PrimaryReference>
    					<core:RefNum>[7]</core:RefNum>
    					<core:RefDate>[7a]</core:RefDate>
    				</core:PrimaryReference>
    			</core:ReferenceCoded>
    			<core:ReferenceCoded>
    				<core:ReferenceTypeCoded>[8]</core:ReferenceTypeCoded>
    				<core:PrimaryReference>
    					<core:RefNum>[9]</core:RefNum>
    				</core:PrimaryReference>
    			</core:ReferenceCoded>
    			<core:ReferenceCoded>
    				<core:ReferenceTypeCoded>[9a]</core:ReferenceTypeCoded>
    				<core:ReferenceTypeCodedOther>[9b]</core:ReferenceTypeCodedOther>
    				<core:PrimaryReference>
    					<core:RefNum>[9c]</core:RefNum>
    				</core:PrimaryReference>
    			</core:ReferenceCoded>
    			<core:ReferenceCoded>
    				<core:ReferenceTypeCoded>[9d]</core:ReferenceTypeCoded>
    				<core:ReferenceTypeCodedOther>[9e]</core:ReferenceTypeCodedOther>
    				<core:PrimaryReference>
    					<core:RefNum>[9f]</core:RefNum>
    				</core:PrimaryReference>
    			</core:ReferenceCoded>
    		</OtherInvoiceReferences>
    je veux recupérer les données entre crochet :
    [4];[5];[6];[7];[7a];[8];[9];[9a];[9b];[9c];[9d];[9e];[9f]
    J'ai choisi d'utiliser une boucle for-each pour parcourir les données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    	<xsl:for-each select="o:Invoice/o:InvoiceHeader/o:InvoiceReferences/o:OtherInvoiceReferences/core:ReferenceCoded ">
    		<xsl:value-of select="core:ReferenceTypeCoded "></xsl:value-of><xsl:text>;</xsl:text>
    		<xsl:value-of select="core:PrimaryReference/core:RefNum "></xsl:value-of><xsl:text>;</xsl:text>
    		<xsl:value-of select="core:PrimaryReference/core:RefDate "></xsl:value-of><xsl:text>;</xsl:text>
    		<xsl:value-of select="core:ReferenceTypeCodedOther "></xsl:value-of><xsl:text>;</xsl:text>
    	</xsl:for-each>
    le souci c'est que quand la données n'existe pas il me met des ";" dont je n'est pas besoin. Dans ce cas, est-ce possible d'utiliser une condition if ?

    Si c'est possible comment faire le test d’existence de données ?

    Est ce que je fais fausse route ? existe t il une méthode plus efficace ?

    Merci a tous !

  2. #2
    Membre émérite
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Points : 2 371
    Points
    2 371
    Par défaut
    Bonjour,

    tu peux faire quelque chose tel que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:if test="core:ReferenceTypeCoded != ''">
      <xsl:text>;</xsl:text>
    </xsl:if>
    Article : Installation de Cocoon
    Je ne réponds pas aux MP à caractère technique.

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2009
    Messages : 311
    Points : 127
    Points
    127
    Par défaut
    Citation Envoyé par polymorphisme Voir le message
    Bonjour,

    tu peux faire quelque chose tel que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:if test="core:ReferenceTypeCoded != ''">
      <xsl:text>;</xsl:text>
    </xsl:if>
    Concernant core:ReferenceTypeCoded faut il que je réécrit le chemin entier ?
    si d'autre balise core:ReferenceTypeCoded existent dans mon code, ne se pourrait il pas y avoir confusion ?

    Merci pour la condition ça marche très bien

  4. #4
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 845
    Points
    4 845
    Par défaut
    Dans un for-each ainsi que dans un template, tu es placé relativement à l'élément sélectionné par le for-each/template.

    Du coup, tous les chemins relatifs à cet élément n'ont aucune chance de pointer vers un autre élément du même type ailleurs dans le document.

Discussions similaires

  1. Utiliser un pas dans une boucle For .. to .. do
    Par colorid dans le forum Langage
    Réponses: 4
    Dernier message: 14/06/2009, 11h09
  2. Condition dans une boucle for
    Par nicolasferraris dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 17/04/2009, 17h28
  3. Appliquer un next sous conditions dans une boucle for
    Par Kibald dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 29/01/2009, 08h56
  4. test avant d'entrer dans une boucle For each cell in selection
    Par totoro02 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 13/01/2009, 09h27
  5. comment effacer un element dans un collection dans une boucle for each
    Par medkarim dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 17/10/2008, 12h48

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