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 :

[XSLT] Eliminer les doublons de valeurs des attributs


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Avril 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut [XSLT] Eliminer les doublons de valeurs des attributs
    Bonjour!
    Après avoir retourné maintes fois dans plusieurs sens les topics du forum je n'ai pu trouvé de solution à mon problème.
    Mon but est de génerer de manière la plus génerique possible (c'est à dire sans nom explicite de noeuds) un formulaire xhtml à partir d'un fichier xml. Ce formulaire est basé sur des balises selects pour chacun des attributs, et dont les options sont les valeurs ...Mon souci est que ces valeurs présentent des doublons et je n'arrive à les supprimer par le biais de mes expressions XPath.

    COmme un bout de code en dit plus que 20 lignes d'explication, en voici l'essentiel:

    le fichier xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <plan nature="Université" >
    	<batiment numero="5" >
    		<salle numero="5" type="amphi" capacite="120" x="50" y="50" />
    		<salle numero="6" type="amphi" capacite="120" x="50" y="75" />
    		<salle numero="12" type="TD" capacite="45" x="50" y="80" />
    	</batiment>
    	<batiment numero="6" >
    		<salle numero="1" type="TP" capacite="24" x="100" y="100" />
    		<salle numero="2" type="TP" capacite="24" x="150" y="100" />
    		<salle numero="3" type="amphi" capacite="120" x="120" y="100" />
    	</batiment>
    </plan>
    grosso modo le fichier 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
     
    <xsl:template match="/">
    		<html>
    			<body>
                                    <form id="formulaire" method="post" >
    						<xsl:apply-templates select="//*" />
    						<input type="submit" name="valid" id="valid" value="soumettre"   />
    				</form>
    			</body>
    		</html>
    	</xsl:template>
    <xsl:template match="*[not(preceding::node()[name()=name(current())])]" >
    		<fieldset>
    			<xsl:variable name="nomBalise" select="name()" />
    			<legend><xsl:value-of select="$nomBalise" /></legend>
    			<xsl:for-each select="@*" >
    				<xsl:variable name="nomAttribut" select="name(current())" />
    				<p>
    				<label><xsl:value-of select="$nomAttribut" /></label>
    				<select>
    					<xsl:apply-templates select="//*[name()=$nomBalise]/@*[name()=$nomAttribut]" />
    				</select>
    				</p>
    			</xsl:for-each >
    		</fieldset>
    	</xsl:template>
    	<xsl:template match="@*" >
    		<xsl:element name="option">
    			<xsl:attribute name="value"><xsl:value-of select="."/></xsl:attribute>
    			<xsl:value-of select="."/>
    		</xsl:element>
    	</xsl:template>
    Et voici une partie de ce qui est généré:
    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
     
    <p>
    			<label>type</label>
    			<select>
    				<option value="amphi">amphi</option>
    				<option value="amphi">amphi</option>
    				<option value="TD">TD</option>
    				<option value="TP">TP</option>
    				<option value="TP">TP</option>
    				<option value="amphi">amphi</option>
    			</select>
    		</p>
    		<p>
    			<label>capacite</label>
    			<select>
    				<option value="120">120</option>
    				<option value="120">120</option>
    				<option value="45">45</option>
    				<option value="24">24</option>
    				<option value="24">24</option>
    				<option value="120">120</option>
    			</select>
    		</p>
    Je voudrais que les doublons des options soient supprimés, auriez vous une solution à ce problème?j'ai eu beau tenté en stockant dans des variables et de tester leur valeur mais rien n'y fait.
    Merci!
    P;S: soyez indulgent je débute en xsl /xpath

  2. #2
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Salut

    Il y a une solution toute prête dans la :
    http://xml.developpez.com/faq/?page=3#xslt_doublon

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Avril 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    TOut d'abord , merci pour ta réponse!
    J'avais pu essayer cette solution effectivement mais en essayant de l'adapter de facon génerique ( pas de nom de noeuds comme dans cet exemple où il est écrit Id ou @val ) je n'avais que des erreurs.
    Pourrais tu me donner un tuyau pour cette adaptation?Désolé mais il est vrai que je ne suis pas un maitre de l'Xpath
    Merci encore!

  4. #4
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    étant donné que ça repose sur des clés, il n'est pas possible d'en faire une adaptation totalement générique, si tu veux supprimer les doublons en plusieurs points, alors il te faut appliquer plusieurs fois la méthode...

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Avril 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    oui je comprends bien que cela pourrait être plus simple, mais c'est une contrainte de mon projet à rendre pour la fac et là j'avoue vraiment que je sèche sur ce point!N'y a til pas un autre moyen que celui là et qui permettrait de faire ca non spécifiquement?

  6. #6
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339
    Par défaut
    Regarde dans la même , il y a une solution XPath qui doit être parfaitement généralisable, mais c'est plutôt déconseillée pour des raisons (entre autre) de performance...

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Avril 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    de quelle solution parles -tu de la même? j'avoue ne pas trop voir excuse moi je suis un peu boulet quand je m'y mets!
    j'ai pu voir aussi que beaucoup parlait de mauvaises performances surtout si le fichier est gros, les contraintes étant imposées par la fac cela ne me dérange pas outre mesure d'autant que si je ne le fais pas, cela imposera une perte de points

  8. #8
    Expert éminent
    Avatar de Swoög
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    6 045
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 6 045
    Points : 8 339
    Points
    8 339

  9. #9
    Nouveau Candidat au Club
    Inscrit en
    Avril 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    voici la modif que j'ai faite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <xsl:if test="//@*[not(preceding::node()/@* = .)]" >
    		<xsl:element name="option">
    			<xsl:attribute name="value"><xsl:value-of select="."/></xsl:attribute>
    			<xsl:value-of select="."/>
    		</xsl:element>
    	</xsl:if>
    Mais rien n'y fait, je n'ai aps d'erreurs maisles doublons sont irrémédiablement encore là, quelqu'un a-t-il une suggestion ou une remarque sur ce que j'ai fait?
    Thanxx!

  10. #10
    Rédacteur

    Avatar de Erwy
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2003
    Messages
    4 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 967
    Points : 10 927
    Points
    10 927
    Par défaut
    Tu ne dois pas utiliser de test, c'est le Xpath de l'apply-templates qui doit faire le tri sur les doublons

Discussions similaires

  1. Descripteur et valeur des attributs pour les instances
    Par 3DKermit dans le forum Général Python
    Réponses: 5
    Dernier message: 25/01/2013, 14h39
  2. Récupérer les valeurs des attributs dans un fichier XML ?
    Par chinoismasque dans le forum Windows Phone
    Réponses: 3
    Dernier message: 01/08/2011, 10h15
  3. Réponses: 8
    Dernier message: 13/10/2008, 20h26
  4. [DOM] changer les valeurs des attributs d'un fichier XML
    Par nonna dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 21/03/2008, 11h56
  5. [XSLT] test sur le commencement des valeurs des attributs
    Par mimiche_fr2000 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 22/02/2008, 13h03

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