+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  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 :
    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 :
    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 :
    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 048
    Détails du profil
    Informations forums :
    Inscription : mars 2004
    Messages : 2 048
    Points : 4 054
    Points
    4 054

    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 :
    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •