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

XML/XSL et SOAP Discussion :

Faire une liste une seule fois


Sujet :

XML/XSL et SOAP

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Faire une liste une seule fois
    Bonjour à tous,

    je tiens à remercie le site développez.com qui m'a souvent aidé, mais là j'ai besoin de votre aide car je n'ai rien trouvé.

    Je débute en XML/XSL et j'ai un problème ou je n'ai pour l'instant pas trouvé de solution.

    J'ai un fichier XML ci-dessous qui contient des personnes, et dans les personne il y a un champ numéro.

    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
    <?xml version="1.0"?>
    <?xml-stylesheet href="test.xsl" type="text/xsl"?>
    <test>
    <Personne>
    	<Numero></Numero>
    	<Nom>Blanc</Nom>
    	<Prenom>Michel</Prenom>
    	<Adresse>Lille</Adresse>
    </Personne>
     
    <Personne>
    	<Numero>6</Numero>
    	<Nom>Martin</Nom>
    	<Prenom>Jean</Prenom>
    	<Adresse>Paris</Adresse>
    </Personne>
     
    <Personne>
    	<Numero>20</Numero>
    	<Nom>Michu</Nom>
    	<Prenom>Maurice</Prenom>
    	<Adresse>Lyon</Adresse>
    </Personne>
    </test>
    Ce que je voudrai c'est avec la mise en forme d'un fichier XSL, lorsque pour la première fois je trouve une balise <Numero> qui est supérieur à zéro, mettre dans une liste tous les numéros. Je voudrai donc un résultat comme ci-dessous.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Nom : Blanc
    Prénom : Michel
    Adresse : Lille
     
    Nom : Martin
    Prénom : Jean
    Adresse : Paris
    Liste : 6 , 20
     
    Nom : Michu
    Prenom : Maurice
    Adresse : Paris
    Le problème c'est que je voulais utiliser une variable (appelé ici boolean) et la modifier une fois que j'ai fais la liste (mettre la valeur à 1), mais on ne peut pas modifier une variable en XSL.

    Voila et merci pour votre aide

    Mon code XSL :

    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
     
    <?xml version="1.0" encoding="utf-8"?>
    <xsl:stylesheet version="2.0"
                    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                    xmlns:xs="http://www.w3.org/2001/XMLSchema"
                    xmlns:fo="http://www.w3.org/1999/XSL/Format">
     
      <xsl:output method="text" version="1.0" encoding="UTF-8" indent="yes"/>
     
      <xsl:variable name="boolean"><xsl:value-of select="0"/></xsl:variable>
    	<xsl:template match="/">
    		<xsl:for-each select="//Personne">
     
    			<xsl:variable name="numero" select="Numero"/>
     
    			<xsl:value-of select="Nom"/>
    			<xsl:value-of select="Prenom"/>
    			<xsl:value-of select="Adresse"/>
     
    			<xsl:if test="($numero &gt; 0)">
    				<xsl:if test="($boolean='0')">
    					<xsl:for-each select="//Personne">>
    						<xsl:variable name="temp_numero" select="Numero"/>
    							<xsl:if test="($temp_numero&gt; 0)">
    								<xsl:value-of select="$temp_numero"/>
    							</xsl:if>
    					</xsl:for-each>
    				</xsl:if>
    			</xsl:if>
     
    		</xsl:for-each>
    	</xsl:template>
    </xsl:stylesheet>

  2. #2
    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
    Effectivement, tu ne peux pas utiliser de variable pour ça, étant donné qu'en XSL, il n'y a que des constantes.

    Il te faut aussi penser, lorsque tu codes en XSL, que tout arrive dans l'ordre du document.

    Moi ce que je ferais pour ça c'est un template matchant l'élément "Personne" qui, si la personne a un numéro et que ce numéro est le premier rencontré, fait le traitement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <xsl:template match="Personne">
      <!-- Affichage des données de la personnes -->
      <xsl:if test="string-length(Numero) != 0 and not(preceding-sibling::Personne[string-length(Numero) != 0])">
        <!-- Affichage des numéros -->
      </xsl:if>
    </xsl:template>

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Je te remercie Loceka , grâce à toi j'ai résolu en 5 minutes un problème qui dure depuis 3 jours. Je posterai la solution que j'ai mise en place demain si cela peut aidé quelqu'un dans un futur plus ou moins proche, et je passerrai le message à résolu.

Discussions similaires

  1. exécuter une macro 1 seule fois par semaine ?
    Par deby23 dans le forum VBA Access
    Réponses: 9
    Dernier message: 20/12/2012, 12h22
  2. [PHP 5.3] je cherche à faire appel à une fonction 1 seul fois
    Par geforce dans le forum Langage
    Réponses: 1
    Dernier message: 23/05/2010, 15h16
  3. Creation ComboBox : comment la faire pointer vers une liste mofiable
    Par Henricoo dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 06/06/2007, 17h09
  4. [Conception] Comment ne faire apparaitre qu'1 seule fois une variable?
    Par axou1er dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 27/02/2007, 12h20
  5. Faire se fermer une fenêtre toute seule, ça ne marche plus
    Par guidav dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 15/01/2007, 17h35

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