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 :

Grouper des donnees par valeur d'une donnee


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de yaya_la_rafale
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 92
    Par défaut Grouper des donnees par valeur d'une donnee
    Bonjour,

    j'ai un document XML qui contient une liste de documents de different type.
    Je souhaite les grouper par la valeur de ce type or je n'arrive pas a utiliser cette fonction group-by car je dois lire le contenu de ma valeur, indiquée en rouge ci dessous.
    Est-il aussi possible de créer un ordre dans le groupe, par exemple grouper d'abord "promoted", puis "tool", puis autre chose dans mon choix d'ordre ?

    pour avoir en sortie
    promoted:item1, item2, item4
    tool:item3,item5,item6

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <document>
    	<content name="thevalue">item1</content>
    	<content name="v_strType">promoted</content> 
    </document>
    mon document XML d'entree est le suivant
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <vce>
    	<document>
    		<content name="thevalue">item1</content>
    		<content name="v_strType">promoted</content> 
    	</document>
    	<document>
    		<content name="thevalue">item2</content>
    		<content name="v_strType">promoted</content> 
    	</document>
    	<document>
    		<content name="thevalue">item3</content>
    		<content name="v_strType">tool</content> 
    	</document>
    	<document>
    		<content name="thevalue">item4</content>
    		<content name="v_strType">promoted</content> 
    	</document>
    	<document>
    		<content name="thevalue">item5</content>
    		<content name="v_strType">tool</content> 
    	</document>
    	<document>
    		<content name="thevalue">item6</content>
    		<content name="v_strType">tool</content> 
    	</document>
    	<document>
    		<content name="thevalue">item7</content>
    		<content name="v_strType">promoted</content> 
    	</document>
    </vce>
    et mon code XSL est le suivant
    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
    <?xml version="1.0"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
     
    	<xsl:template match="/vce">
    		<vce>
    			<xsl:for-each-group select="document" group-by="@v_strType">		
    					<xsl:value-of select="current-grouping-key()"/>
    					POSITION : <xsl:value-of select="position()"/>
    					<xsl:value-of select="content[@name='thevalue']"/>
    					<xsl:value-of select="content[@name='v_strType']"/>			
    			  </xsl:for-each-group>			
    			<!--
    			<xsl:for-each select="document">
    				<xsl:if test="(  (content[@name='v_strType']='tool')  )  ">
    					ecrire
    				</xsl:if>
    			</xsl:for-each>
    			-->
    		</vce>
    	</xsl:template>
    </xsl:stylesheet>

    quelqu'un aurait-il une suggestion svp? merci

    sinon j'ai encore cette option, mais elle relit tous les documents... tres mauvais code
    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
     
    <?xml version="1.0"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
     
    	<xsl:template match="/vce">
    		<vce>
     
    			<xsl:for-each select="document">
    				<xsl:if test="(  (content[@name='v_strType']='tool')  )  ">
    					<xsl:value-of select="current-grouping-key()"/>
    					POSITION : <xsl:value-of select="position()"/>
    					<xsl:value-of select="content[@name='thevalue']"/>
    					<xsl:value-of select="content[@name='v_strType']"/>		
    				</xsl:if>
    			</xsl:for-each>
     
    			<xsl:for-each select="document">
    				<xsl:if test="(  (content[@name='v_strType']='promoted')  )  ">
    					<xsl:value-of select="current-grouping-key()"/>
    					POSITION : <xsl:value-of select="position()"/>
    					<xsl:value-of select="content[@name='thevalue']"/>
    					<xsl:value-of select="content[@name='v_strType']"/>		
    				</xsl:if>
    			</xsl:for-each>
    		</vce>
    	</xsl:template>
    </xsl:stylesheet>

  2. #2
    Membre confirmé Avatar de yaya_la_rafale
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 92
    Par défaut reponse trouvé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"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
     
    	<xsl:template match="/vce">
    		<vce>
     
    		<xsl:for-each-group select="document/content[@name='v_strType']" group-by="text()">
    			<xsl:for-each select="current-group()">		
    			<xsl:if test="position() &lt; 4"> 
    			TYPE:<xsl:value-of select="current-grouping-key()"/> POSITION : <xsl:value-of select="position()"/>
    						<xsl:value-of select="document/content[@name='thevalue']"/>
    						<xsl:value-of select="document/content[@name='v_strType']"/>	
    						</xsl:if>
    			</xsl:for-each>					
    		</xsl:for-each-group>	
     
    		</vce>
    	</xsl:template>
    </xsl:stylesheet>

  3. #3
    Membre expérimenté
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2007
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 199
    Par défaut
    ...juste une précision, on est bien d'accord que c'est du XSLT 2 et non 1 comme mis dans ton code ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

  4. #4
    Membre confirmé Avatar de yaya_la_rafale
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 92
    Par défaut
    oui, c'est effectivement en version 2.

    et d'ailleurs je viens de me rendre compte que je dois utiliser du XML 1.0. donc tout est à refaire pour moi #pleurs#

    si qqun a une solution en XML 1.0. pour ce meme code car cette fonction for-each-group n'existe pas en XML 1.0.

  5. #5
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Hello,

    Rassure-toi, ça n'a rien à voir.

    XML 1.0 est géré par toutes les versions de XSLT.
    XSLT existe en versions 1.0 et 2.0, et seul XSLT 2.0 gère for-each-group.

    Si tu as le droit d'utiliser XSLT 2.0 tout va bien, il gérera ton XML 1.0 sans aucun problème.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre expérimenté
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2007
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 199
    Par défaut
    Je pense qu'il voulait dire qu'il ne pouvait utiliser que XSLT 1

    non ?

  7. #7
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Possible mais lui seul le sait.

    Il n'y a rien de surprenant à ce que les contraintes interdisent autre chose que XML 1.0. Il est par contre plus rare que soit interdit XSLT 2.0.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. insérer des lignes par rapport a une valeur dans la ligne au-dessus
    Par samihichem dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 21/05/2015, 09h08
  2. Creer des user par code dans une base de donnees Interbase
    Par dachir dans le forum Bases de données
    Réponses: 2
    Dernier message: 16/07/2006, 14h55
  3. [VBA-E] Copie par valeur d'une feuille dans un nouveau classeur
    Par MatMeuh dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 17/05/2006, 22h38
  4. [CR] Grouper des minutes par cinq et non une par une.
    Par Etienne51 dans le forum SAP Crystal Reports
    Réponses: 6
    Dernier message: 14/09/2004, 13h45
  5. [CR]grouper des dates par semaines, mais semaines FR !
    Par neo.51 dans le forum SAP Crystal Reports
    Réponses: 11
    Dernier message: 18/05/2004, 20h43

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