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] suppression de doublons


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 104
    Points : 65
    Points
    65
    Par défaut [XSLT] suppression de doublons
    Bonjour à tous,

    Petite question pour un newbie que je suis en XSLT (je viens de découvrir ce language très intéressant il y a qqs jours)

    ayant un fichier XML de ce type :

    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
    <ListeClients>
     
    <client nom="toto" domaine="construction">
    ...
    </client>
     
    <client nom="titi" domaine="design">
    ...
    </client>
     
    <client nom="tata" domaine="construction">
    ...
    </client>
     
    <client nom="tutu" domaine="medical">
    ...
    </client>
     
    </ListeClients>
    Comment pourrais-je parcourir ce fichier (ca je sais faire ) et placer dans une variable type tableau (c possible, ca ?) la liste des différents domaines ? donc le résultat en mémoire serait ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    construction
    design
    medical
    autrement dit, je sais qu'il est par exemple possible de parcourir une liste d'éléments par ordre alphabétique, mais comment supprimer les doublons (domaine "construction" dans ce cas) ? y a-t-il une fonction qui ferait ca ou faut-il le faire manuellement ?

    merci pour vos éclaircissements.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Février 2009
    Messages : 155
    Points : 231
    Points
    231
    Par défaut
    Bonjour,

    On peut faire comme ça (en XSLT 1.1 minimum) :

    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
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.1">
    	<xsl:output  method='text' encoding='ISO-8859-1' />
     
    	<xsl:template match="/">
    		<xsl:variable name="temp">
    			<xsl:for-each select="//client[@domaine]">
    				<xsl:sort select="@domaine"/>
    				<xsl:element name="dom">
    					<xsl:value-of select="@domaine"/>
    				</xsl:element>
    			</xsl:for-each>
    		</xsl:variable>
     
    		<xsl:for-each select="$temp//dom">
    			<xsl:if test="not(text() = following::text())">
    				<xsl:value-of select="text()"/>
    			</xsl:if>
    		</xsl:for-each>
    	</xsl:template>
     
    	<xsl:template match="text()"/>
     
    </xsl:stylesheet>

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 104
    Points : 65
    Points
    65
    Par défaut
    Bonjour,

    Merci pour votre aide.
    Néanmoins, en essayant d'utiliser cet exemple, voici l'erreur que j'ai :

    Message : La référence à une variable ou un paramètre « temp » doit correspondre à une liste de noeuds.
    auriez-vous une idée de l'origine de cette erreur ?
    Merci d'avance.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Février 2009
    Messages : 155
    Points : 231
    Points
    231
    Par défaut
    Bonjour,

    Il faut au minimum utiliser un processeur XSLT supportant la version 1.1, j'ai testé le code avec Saxon 6.5.5, Intel XML Software Suite, ou un processeur 2.0 : Saxon B ou SA 9.1.0.7.
    MSXML ne supportant que la version 1.0, ce code fonctionnera pas.
    A vrai dire je ne sais pas trop comment aborder le problème en 1.0 et je suis curieux de voir une solution...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 104
    Points : 65
    Points
    65
    Par défaut
    merci pour la réponse.

    Concrètement, qu'est-ce que cela signifie ?
    Ce code étant sensé s'exécuter sur 1 serveur, dans un site asp.NET, que faut-il installer pour que cela fonctionne ? faut-il installer qqch sur le serveur ? de quoi dépend la transformation XSLT pour qu'elle s'exécute en 1.1 et non 1.0 ? je suppose qu'il ne suffit pas de mettre "<xsl:stylesheet xmlnssl="http://www.w3.org/1999/XSL/Transform" version="1.1">", sinon ce serait trop beau ?

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Février 2009
    Messages : 155
    Points : 231
    Points
    231
    Par défaut
    Hélas, concrètement, en .NET la classe XslCompiledTransform ainsi que le compilateur xsltc.exe ne supportent que la version 1.0 de XSLT...

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Février 2009
    Messages : 155
    Points : 231
    Points
    231
    Par défaut
    ... il y a la solution d'utiliser l'extension microsoft "msxsl" :

    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
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" 
    	xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    	xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
    	extension-element-prefixes="msxsl"> 
     
    	<xsl:template match="/">
    		<xsl:variable name="temp">
    			<xsl:for-each select="//client[@domaine]">
    				<xsl:sort select="@domaine"/>
    				<xsl:element name="dom">
    					<xsl:value-of select="@domaine"/>
    				</xsl:element>
    			</xsl:for-each>
    		</xsl:variable>
     
    		<xsl:for-each select="msxsl:node-set($temp)//dom">
    			<xsl:if test="not(text() = following::text())">
    				<xsl:value-of select="text()"/>
    			</xsl:if>
    		</xsl:for-each>
    	</xsl:template>
     
    	<xsl:template match="text()"/>
     
    </xsl:stylesheet>
    on reste en 1.0 et ça fonctionne bien sur un serveur IIS.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 104
    Points : 65
    Points
    65
    Par défaut
    ah oui super, je viens de tester brièvement, et ca a l'air de passer !
    Nickel, merci bcp !

    Au passage, je viens de trouver un truc peut-être intéressant, mais pas encore eu le temps de tester :

    xsl:for-each-group

    C'était peut-être également une autre alternative intéressante pour ce que je désire faire !

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 104
    Points : 65
    Points
    65
    Par défaut
    Mmmmhh... ca avance... Encore une question au passage :

    soit mon fichier xml 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
    <clients>
       <client secteur="informatique">
          <nom>Client aaa</nom>
       </client>
       <client secteur="construction">
          <nom>Client bbb</nom>
       </client>
       <client secteur="informatique">
          <nom>Client ccc</nom>
       </client>
       <client secteur="construction">
          <nom>Client ddd</nom>
       </client>
    <clients>
    et mon fichier xslt 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
    33
    34
    35
    36
    37
    38
    39
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0"
    	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    	xmlns:msxsl="urn:schemas-microsoft-com:xslt"
    	extension-element-prefixes="msxsl">
    
      <xsl:template match="/">    
        <xsl:variable name="temp">
          <xsl:for-each select="//client">
            <xsl:sort select="@secteur"/>
            <xsl:element name="dom">
              <xsl:value-of select="@secteur"/>
            </xsl:element>
          </xsl:for-each>
        </xsl:variable>
        
        <xsl:for-each select="msxsl:node-set($temp)//dom">
          <xsl:if test="not(text() = following::text())">
            <xsl:call-template name="MaFonction" />
          </xsl:if>
        </xsl:for-each>
      </xsl:template>
    
      <xsl:template name="MaFonction">
        <xsl:variable name="SECTEUR">
          <xsl:value-of select="."/>
        </xsl:variable>
    
        Secteur : <xsl:value-of select="$SECTEUR"/>
    
        <xsl:for-each select="//client[@secteur=$SECTEUR]">
          <xsl:value-of select="nom"/>
        </xsl:for-each>
        
        <br />
      </xsl:template>
      
      </xsl:stylesheet>
    ces deux fichiers me donnent le résultat suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Secteur : construction
    Secteur : informatique
    alors que j'eu plutôt espéré ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Secteur : construction
    Client bbb
    Client ddd
     
    Secteur : informatique
    Client aaa
    Client ccc
    et donc autrement dit, mes trois lignes en rouge dans mon fichier XSLT, qui sont sensées lister le nom des entreprises pour chacun des deux secteurs, ne fonctionnent point . Pourriez-vous m'aiguiller sur l'erreur que j'ai commise ?

    Merci bien

  10. #10
    Membre actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Février 2009
    Messages : 155
    Points : 231
    Points
    231
    Par défaut
    plutôt comme ç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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0"
    	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    	xmlns:msxsl="urn:schemas-microsoft-com:xslt"
    	extension-element-prefixes="msxsl">
     
    	<xsl:template match="/">    
    		<xsl:variable name="temp">
    			<xsl:for-each select="//client">
    				<xsl:sort select="@secteur"/>
    				<xsl:element name="secteur">
    					<xsl:value-of select="@secteur"/>
    					<xsl:element name="client">
    						<xsl:value-of select="."/>
    					</xsl:element>
    				</xsl:element>
    			</xsl:for-each>
    		</xsl:variable>
     
    		<xsl:for-each select="msxsl:node-set($temp)//secteur">
    			<xsl:choose>
    				<xsl:when test="not(text() = preceding::text())">
    					<xsl:call-template name="MaFonction_1" />
    				</xsl:when>
    				<xsl:otherwise>
    					<xsl:call-template name="MaFonction_2" />
    				</xsl:otherwise>
    			</xsl:choose>
    		</xsl:for-each>
    	</xsl:template>
     
    	<xsl:template name="MaFonction_1">
    		Secteur : 
    		<xsl:value-of select="./text()"/>
    		<br />
    		<xsl:value-of select="./client/text()"/>
    		<br />
    	</xsl:template>
     
    	<xsl:template name="MaFonction_2">
    		<xsl:value-of select="./client/text()"/>
    		<br />
    	</xsl:template>
     
    </xsl:stylesheet>

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 104
    Points : 65
    Points
    65
    Par défaut
    OK, et dans ce cas, pour récupérer les infos du client, c'est "./client/text()", OK, mais si par exemple je mets d'autres balises que <nom></nom> dans mes balises <client></client>, j'ai un moyen de récupérer mes champs (nom, prenom,...) individuellement ?

    Merci bcp.

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 104
    Points : 65
    Points
    65
    Par défaut
    je suis d'accord qu'à la place de mettre ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
              <xsl:element name="client">
                <xsl:value-of select="."/>
              </xsl:element>
    je pourrais très bien mettre ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
              <xsl:element name="nom">
                <xsl:value-of select="./nom"/>
              </xsl:element>
     
              <xsl:element name="prenom">
                <xsl:value-of select="./prenom"/>
              </xsl:element>
    et ainsi récupérer mes variables nom et prenom, mais l'inconvénient serait de devoir rajouter 1 variable pour chacun des enfants de <client>

    c'est juste pour 1 souci d'optimisation

    si on pouvait directement aller rechercher les enfants de <client> par un truc du style "./client/nom/text()" ce ne serait pas plus mal à mon avis, et en tout cas pas moins propre...

  13. #13
    Membre actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Février 2009
    Messages : 155
    Points : 231
    Points
    231
    Par défaut
    Il n'y a qu'une variable : temp, dans laquelle on construit un nouvel arbre.
    On peut y imbriquer ce qu'on veut, et pourquoi pas ajouter deux enfants à l'élément client (nom et prenom) :

    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
     
    	<xsl:template match="/">    
    		<xsl:variable name="temp">
    			<xsl:for-each select="//client">
    				<xsl:sort select="@secteur"/>
    				<xsl:element name="secteur">
    					<xsl:value-of select="@secteur"/>
    					<xsl:element name="client">
    						<xsl:value-of select="."/>
    						<xsl:element name="nom">
    							recup xml nom
    						</xsl:element>
    						<xsl:element name="prenom">
    							recup xml prenom
    						</xsl:element>
    					</xsl:element>
    				</xsl:element>
    			</xsl:for-each>
    		</xsl:variable>
    pour les utiliser plus loin dans les templates :
    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
    	<xsl:template name="MaFonction_1">
    		Secteur : 
    		<xsl:value-of select="./text()"/>
    		<br />
    		<xsl:value-of select="./client/text()"/>
    		<xsl:value-of select="./client/nom/text()"/>
    		<xsl:value-of select="./client/prenom/text()"/>
    		<br />
    	</xsl:template>
     
    	<xsl:template name="MaFonction_2">
    		<xsl:value-of select="./client/text()"/>
    		<xsl:value-of select="./client/nom/text()"/>
    		<xsl:value-of select="./client/prenom/text()"/>
    		<br />
    	</xsl:template>

  14. #14
    Membre actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Février 2009
    Messages : 155
    Points : 231
    Points
    231
    Par défaut
    et du coup on peut simplifier, j'oubliais qu'on avait déjà le 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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0"
    	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    	xmlns:msxsl="urn:schemas-microsoft-com:xslt"
    	extension-element-prefixes="msxsl">
     
    	<xsl:template match="/">    
    		<xsl:variable name="temp">
    			<xsl:for-each select="//client">
    				<xsl:sort select="@secteur"/>
    				<xsl:element name="secteur">
    					<xsl:value-of select="@secteur"/>
    						<xsl:element name="nom">
    							<xsl:value-of select="nom"/>
    						</xsl:element>
    						<xsl:element name="prenom">
    							recup prenom
    						</xsl:element>
    					</xsl:element>
    			</xsl:for-each>
    		</xsl:variable>
     
    		<xsl:for-each select="msxsl:node-set($temp)//secteur">
    			<xsl:choose>
    				<xsl:when test="not(text() = preceding::text())">
    					<xsl:call-template name="MaFonction_1" />
    				</xsl:when>
    				<xsl:otherwise>
    					<xsl:call-template name="MaFonction_2" />
    				</xsl:otherwise>
    			</xsl:choose>
    		</xsl:for-each>
    	</xsl:template>
     
    	<xsl:template name="MaFonction_1">
    		Secteur : 
    		<xsl:value-of select="./text()"/>
    		<br />
    		<xsl:value-of select="./nom/text()"/>
    		<xsl:value-of select="./prenom/text()"/>
    		<br />
    	</xsl:template>
     
    	<xsl:template name="MaFonction_2">
    		<xsl:value-of select="./nom/text()"/>
    		<xsl:value-of select="./prenom/text()"/>
    		<br />
    	</xsl:template>
     
    </xsl:stylesheet>

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 104
    Points : 65
    Points
    65
    Par défaut
    merci pour tous ces conseils.

    Il y a qqch que j'ai quand-même un peu du mal à saisir...
    J'aimerais par exemple compter le nombre d'occurences dans chacun des secteurs. j'utilise alors la "requete" suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="count(//client[@secteur='construction'])"/>
    (où construction sera remplacé par une variable, mais c'est juste pour les tests )
    Cette instruction fonctionne bien si je la place tout au début, càd juste après

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:template match="/">
    mais par contre elle ne fonctionne plus si je la place par exemple tout au début de "MaFonction_1". Donc... ... j'en déduis que lorsqu'on fait un select, il regarde dans l'arbre qui se trouve en mémoire à ce moment-là et non dans la totalité du fichier. et comme le "match="/"" place tout le fichier en mémoire, cela fonctionne bien, mais une fois dans "MaFonction_1", seules les variables "nom" et "prénom" se trouvent en mémoire. Mon raisonnement est-il exact ??? n'hésitez pas à me flageller si ce n'est pas le cas

    Est-ce que c'est possible, dans n'importe quelle fonction, de faire une "requete" sur la totalité du fichier, et non seulement sur ce qui se trouve en mémoire à ce moment-là ?

    J'espère que vous me comprenez, car après relecture, je me rends compte que ca ne doit pas être facile

    merci bien pour vos conseils judicieux !

  16. #16
    Membre actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Février 2009
    Messages : 155
    Points : 231
    Points
    231
    Par défaut
    Bonjour,

    Effectivement à cet endroit nous sommes dans la variable $temp et l'arbre qu'on a construit ne contient pas d'élément client.

    On peut mémoriser l'arbre original au début du programme dans une variable globale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	<xsl:variable name="all">
    		<xsl:copy-of select="*"/>
    	</xsl:variable>
    ce qui permet d'y faire référence quand on en a besoin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="count(msxsl:node-set($all)//client[@secteur='construction'])"/>

  17. #17
    Membre actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Février 2009
    Messages : 155
    Points : 231
    Points
    231
    Par défaut
    ... mais on ne pourra pas utiliser une seconde variable dans ce type de requête.

    s'il s'agit simplement de compter les occurences du secteur, on va juste ajouter un param dans le for-each :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    		<xsl:for-each select="msxsl:node-set($temp)//secteur">
    			<xsl:choose>
    				<xsl:when test="not(text() = preceding::text())">
    					<xsl:call-template name="MaFonction_1" >
    						<xsl:with-param name="sect" select="text()"/>
    					</xsl:call-template>
    				</xsl:when>
    				<xsl:otherwise>
    					<xsl:call-template name="MaFonction_2" />
    				</xsl:otherwise>
    			</xsl:choose>
    		</xsl:for-each>
    pou y accéder ainsi dans le template Fonction_1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	<xsl:template name="MaFonction_1">
    		<xsl:param name="sect"/>
    		<xsl:value-of select="count(//secteur[text()=$sect])"/>
       ...

  18. #18
    Membre actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France, Indre et Loire (Centre)

    Informations forums :
    Inscription : Février 2009
    Messages : 155
    Points : 231
    Points
    231
    Par défaut
    ... quoique, avec la variable $all et le param $sect :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:value-of select="count(msxsl:node-set($all)//client[@secteur=$sect])"/>
    fonctionne.

  19. #19
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 104
    Points : 65
    Points
    65
    Par défaut
    bon, eh bien je pense que grâce à vous, j'ai bien compris les bases de ce language. Encore un grand merci pour tous ces conseils !

  20. #20
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 104
    Points : 65
    Points
    65
    Par défaut
    Avant de clôturer ce sujet, je vous fait part d'un excellent article sur lequel je viens de tomber et qui vaut le détour : Comment filtrer les doublons avec XSLT 1.0. Méthodes "classique" et "muenchian" !

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [xslt] Suppression des éléments sans contenu.
    Par dibbouk dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 17/06/2005, 18h17
  2. Réponses: 17
    Dernier message: 03/12/2004, 12h17
  3. [langage] Suppression de doublon dans tableau
    Par LFC dans le forum Langage
    Réponses: 5
    Dernier message: 15/04/2004, 15h08
  4. Requête de suppression de doublons : besoin d'aide
    Par biocorp dans le forum Langage SQL
    Réponses: 3
    Dernier message: 27/01/2004, 18h04
  5. [LG]Suppression de doublons
    Par moustique31 dans le forum Langage
    Réponses: 5
    Dernier message: 20/12/2003, 22h03

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