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 :

[XPATH] distinct values


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 18
    Par défaut [XPATH] distinct values
    Bonjour, voici un extrait du xml que j'ai:
    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
     
    <root>
       <row1>
           <attr1>value1</attr1>
           <attr2>type2</attr2>
      </row1>
      <row2>
           <attr1>value2</attr1>
           <attr2>type2</attr2>
      </row2>
      <row3>
           <attr1>value1</attr1>
           <attr2>type2</attr2>
      </row3>
      <row4>
           <attr1>value2</attr1>
           <attr2>type2</attr2>
      </row4>
    </root>
    Je cherche à avoir les valeurs distinctes de tous les attr1. Je souhaite avoir un tableau avec value1,value2 uniquement.
    j'ai essayé ceci:
    /root/row[not(attr1/text()=preceding-sibling::attr1/text())]/attr1/text()

    mais ca me renvoie toutes les valeurs de l'attribut attr1

    merci beaucoup pour votre aide

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Par défaut
    Hello,
    Tu peux regarder ça :
    http://www.jenitennison.com/xslt/gro...tml#by-content

    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
    <?xml version="1.0"?>
    <xsl:stylesheet version="1.0"
    	xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    	<xsl:output method="xml" indent="yes"/>
    	<xsl:key name="myKey" match="//*[attr1]" use="attr1"/>
     
    	<xsl:template match="/">
    		<res>
    			 <xsl:apply-templates select="//*[attr1][generate-id(.) = generate-id(key('myKey', attr1)[1])]"/>
    		</res>
    	</xsl:template>
     
    	<xsl:template match="*[attr1]">
    		<xsl:variable name="attr1" select="attr1"/>
    		<xsl:element name="group">
    			<xsl:attribute name="attr1"><xsl:value-of select="$attr1"/></xsl:attribute>
    			<!--
    			<xsl:copy-of select="key('myKey',$attr1)"/>
    			-->
    		</xsl:element>
    	</xsl:template>
     
    </xsl:stylesheet>
    Si t'enlève les commentaire t'auras les noeuds regrouper pour chaque valeur de attr1.

    Sinon, ce xml est pas terrible vis à vis du noms des élements.
    Notamment pour row1, row2, ....
    Pour attr1, attr2, ça peut se justifier puisque ces éléments ne semblent pas remplir la même fonction. Mais il vaudrait mieux utiliser des noms parlant justement qui expliquent leur fonctions.
    On évite d'inclure l'itération dans le nom des élément car ça empêche tout traitement par groupe d'élément ayant même nom.
    Et les normes XML gèrent très bien le séquencement si on souhaite traiter une itération d'un noeud en particulier.

  3. #3
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 18
    Par défaut
    Merci pour la réponse, je vais passer par xsl, car en fait j'utilise ajax et je récupère donc un fichier xml de la base de donnée et j'aimerai ainsi avoir dans un tableau les éléments différents d'un attribut qui revient à chaque fois, comme dans l'exemple précédent.

    j'utilise cette méthode pour parser avec xpath (en javascript)
    data = ResultatXML.selectNodes("requete Xpath");

    et ensuite pour extraire les valeurs:
    while (i<data.length) recupData[i]=data.item(i).xml;


    Pour les noms de variable, je sais qu'ils ne sont pas terribles, mais c'est parceque ce ne sont pas les memes dans la base de donnée et du coup, j'ai esséyé de simplifier le probleme...mais c'est vrai que j'aurai pu etre plus explicite...


    Merci de la réponse, je vais travailler ca!

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    1 466
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 466
    Par défaut
    Re,
    Avec ce genre de xml en entrée
    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
    <?xml version="1.0"?>
    <root>
    	<row>
    		<attr1>value1</attr1>
    		<attr2>type2</attr2>
    	</row>
    	<row>
    		<attr1>value2</attr1>
    		<attr2>type2</attr2>
    	</row>
    	<row>
    		<attr1>value1</attr1>
    		<attr2>type2</attr2>
    	</row>
    	<row>
    		<attr1>value2</attr1>
    		<attr2>type2</attr2>
    	</row>
    </root>
    Ce XPATH suffit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //row[not(attr1 = preceding-sibling::row/attr1)]

  5. #5
    Membre averti
    Inscrit en
    Juillet 2009
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 18
    Par défaut
    Waww ta requete marche a merveille et est tres rapide en plus!!

    Je l'utilise et ca marche! Merci beaucoup pour cette réponse, ca me facilite la vie!!

    Bonne journée, probleme Résolu!!

    Merci encore!

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

Discussions similaires

  1. [XSLT 1.0] groupement + fonction distinct-values()
    Par win_ubuntu dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 30/01/2013, 10h36
  2. [xslt 1.0] - distinct value sur un attribut
    Par jacquesh dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 30/10/2007, 07h38
  3. 4D Open for 4D:pb OP Distinct Values
    Par Kendael dans le forum 4D
    Réponses: 3
    Dernier message: 20/04/2007, 12h43
  4. xpath dynamique dans un xsl:value-of
    Par zewam dans le forum XMLRAD
    Réponses: 11
    Dernier message: 19/01/2006, 12h53
  5. XPath et DISTINCT
    Par netsliver dans le forum XSL/XSLT/XPATH
    Réponses: 7
    Dernier message: 16/06/2004, 11h47

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