Précédent   Forum du club des développeurs et IT Pro > Autres langages > XML/XSL et SOAP
XML/XSL et SOAP Forum d'entraide sur XML et SOAP. Avant de poster -> FAQ XML, Sources XML
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 16/11/2012, 10h42   #1
carre.clement
Invité de passage
 
Homme Clément Carré
Étudiant
Inscription : novembre 2012
Messages : 2
Détails du profil
Informations personnelles :
Nom : Homme Clément Carré
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>
carre.clement est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2012, 14h11   #2
Loceka
Expert Confirmé
 
Avatar de Loceka
 
Tlouye Ci
Inscription : mars 2004
Messages : 1 800
Détails du profil
Informations personnelles :
Nom : Tlouye Ci

Informations forums :
Inscription : mars 2004
Messages : 1 800
Points : 2 918
Points : 2 918
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>
Loceka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/11/2012, 14h33   #3
carre.clement
Invité de passage
 
Homme Clément Carré
Étudiant
Inscription : novembre 2012
Messages : 2
Détails du profil
Informations personnelles :
Nom : Homme Clément Carré
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2012
Messages : 2
Points : 0
Points : 0
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.
carre.clement est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 22h51.


 
 
 
 
Partenaires

Hébergement Web