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 :

Boucler sur une suite de 4 éléments [XSLT 1.0]


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 11
    Points : 9
    Points
    9
    Par défaut Boucler sur une suite de 4 éléments
    Bonjour,

    J'ai pour un besoin métier demandé que l'on m'extraie des données de la base de données de cette façon-là:

    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
     
    <UTILISATEURS>
        <UTILISATEUR>
            <NOM>
            </NOM>
            <PRENOM>
            </PRENOM>
            <NUMERO>
            </NUMERO>
            <TYPE>
            </TYPE>
        </UTILISATEUR>
        <UTILISATEUR>
            <NOM>
            </NOM>
            <PRENOM>
            </PRENOM>
            <NUMERO>
            </NUMERO>
            <TYPE>
            </TYPE>
        </UTILISATEUR>
    </UTILISATEURS>
    Le problème, c'est que mes chers amis m'envoient plutôt ça:

    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
     
    <UTILISATEURS>
            <NOM>
            </NOM>
            <PRENOM>
            </PRENOM>
            <NUMERO>
            </NUMERO>
            <TYPE>
            </TYPE>
            <NOM>
            </NOM>
            <PRENOM>
            </PRENOM>
            <NUMERO>
            </NUMERO>
            <TYPE>
            </TYPE>
            <NOM>
            </NOM>
            <PRENOM>
            </PRENOM>
            <NUMERO>
            </NUMERO>
            <TYPE>
            </TYPE>
    </UTILISATEURS>
    Ils ont pas respecté les bases du XML mais bon c'est trop tard maintenant pour changer ca.
    Comment pourrais-je faire pour faire un tableau avec la liste des utilisateurs?

    J'avais prévu un truc comme ca mais ca ne marchera pas du coup..

    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
    37
    38
    39
     
    	<xsl:template match="UTILISATEURS">
    		<div>
    			<div>
    				<table>
    					<tr>	
    						<th>
    							Type:
    						</th>
    						<th>
    							Nom:
    						</th>
    						<th>
    							Prenom:
    						</th>
    						<th>
    							Numéro:
    						</th>
    					</tr>
    					<xsl:for-each select="utilisateur">
    						<tr>
    							<td>
    								<xsl:value-of select="TYPE"/>
    							</td>
    							<td>
    								<xsl:value-of select="NOM"/>
    							</td>
    							<td>
    								<xsl:value-of select="PRENOM"/>
    							</td>
    							<td>
    								<xsl:value-of select="NUM"/>
    							</td>
    						</tr>
    					</xsl:for-each>
    				</table>
    			</div>		
    		</div>
    	</xsl:template>
    Merci d'avance pour votre aide

  2. #2
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Est-ce une bonne idée de boucler sur les noms <xsl:for-each select="NOM"> et ensuite faire des select sur les following-siblings?
    (je viens d'y penser après avoir écrit mon message, n'empêche que je sais pas encore comment sélectionner les trois nœuds suivant chaque <nom></nom>)

    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
     
    <xsl:for-each select="NOM">
    						<tr>
    							<td>
    								<xsl:value-of select="."/>
    							</td>
    							<td>
    								<xsl:value-of select="following-sibling::PRENOM[position()=position()+1]"/>
    							</td>
    							<td>
    								<xsl:value-of select="following-sibling::NUMERO[position()=position()+2]"/>
    							</td>
    							<td>
    								<xsl:value-of select="following-sibling::TYPE[position()=position()+3]"/>
    							</td>
    						</tr>
    					</xsl:for-each>
    Je ne suis pas convaincu par mon position()=position()+1.
    Je veux dire au processeur le nœud PRENOM qui a la position suivante au nœud NOM qu'on traite... Je sais pas si c'est plus clair..

  3. #3
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    J'ai trouvé après avoir bien mangé (j'étais trop faible pour réfléchir).

    Pour ceux que ca intéresse, c'était très simple, suffit de lire la définition de following-siblings.

    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
     
    <xsl:for-each select="NOM">
    	<tr>
    		<td>
    			<xsl:value-of select="."/>
    		</td>
    		<td>
    			<xsl:value-of select="following-sibling::PRENOM[1]"/>
    		</td>
    		<td>
    			<xsl:value-of select="following-sibling::NUMERO[1]"/>
    		</td>
    		<td>
    			<xsl:value-of select="following-sibling::TYPE[1]"/>
    		</td>
    	</tr>
    </xsl:for-each>
    (je lui dis prends le premier PRENOM, puis le premier NUMERO, puis le premier TYPE, qui viennent après le NOM courant.)

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Ouaip, c'est probablement la manière la plus simple.

    Ceci dit j'aurais d'abord converti le fichier en un autre fichier plus simple à utiliser, mais bon.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Futur Membre du Club
    Inscrit en
    Août 2007
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Ca pourrait, mais dans mon cas c'est beaucoup plus compliqué
    Merci pour la réponse en tout cas .

    Bonne journée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Boucler sur une suite d'input de même class
    Par arthuro45 dans le forum jQuery
    Réponses: 17
    Dernier message: 11/03/2011, 08h51
  2. [VBA-E] boucler sur une colonne
    Par ricoree78 dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 14/02/2007, 20h04
  3. Réponses: 12
    Dernier message: 26/08/2006, 11h29
  4. Boucler sur une table pour renommer des valeurs
    Par webwhisky dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 03/01/2006, 14h19
  5. Faire un select sur une quantité défini d'élément
    Par tripper.dim dans le forum Requêtes
    Réponses: 2
    Dernier message: 21/06/2005, 11h14

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