p
u
b
l
i
c
i
t
é
publicité
  1. #1
    Invité de passage
    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 : 0
    Points
    0

    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é Sénior
    Avatar de Loceka
    Inscrit en
    mars 2004
    Messages
    2 056
    Détails du profil
    Informations forums :
    Inscription : mars 2004
    Messages : 2 056
    Points : 4 084
    Points
    4 084

    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
    Invité de passage
    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 : 0
    Points
    0

    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, 11h22
  2. [PHP 5.3] je cherche à faire appel à une fonction 1 seul fois
    Par geforce dans le forum Fonctions
    Réponses: 1
    Dernier message: 23/05/2010, 14h16
  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, 16h09
  4. Réponses: 4
    Dernier message: 27/02/2007, 11h20
  5. Réponses: 5
    Dernier message: 15/01/2007, 16h35

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