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 :

[XSL-XPATH] compter attribut dynamique


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    237
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 237
    Points : 88
    Points
    88
    Par défaut [XSL-XPATH] compter attribut dynamique
    Bonjour,

    Je veux compter les attributs d'un doc xml et je ne connais pas la syntaxe. J'ai cherché mais apparemment je dois être le seul à rencontrer ce problème.

    Voilà mon bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <xsl:for-each select="//@*">
      <xsl:variable name="AttName">
          <xsl:value-of select="name()"/>
      </xsl:variable>
      <xsl:variable name="attCount">  			
    <xsl:value-of select="count(//*[name()=$AttName])" />
    </xsl:variable>
    La valeur de $attCount est toujours à zéro ?
    Je ne sais pas comment structurer le count d'un attribut dynamique


    Merci

  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,

    il manque @ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    count(//@*[name()=$AttName])

  3. #3
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    237
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 237
    Points : 88
    Points
    88
    Par défaut
    Merci beaucoup pour la réponse.

    J'ai une autre question est il possible de sélectionner de manière unique les attributs d'un flot xml.

    Par exemple pour une balise j'ai trouvé cette solution (après galère)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <xsl:for-each select="//*">
    <xsl:variable name="elemName">
      <xsl:value-of select="name()"/>
    </xsl:variable>
    <xsl:if test="not(preceding::*[name()=$elemName]) and not(ancestor::*[name()=$elemName])">
    ....
    Pour un attribut ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <xsl:for-each select="//@*">
    <xsl:variable name="AttName">
    <xsl:value-of select="name()"/>
    </xsl:variable>
    <xsl:if test="not(preceding-sibling::*[name()=$AttName]) ">
    ...
    La restriction ne marche pas

    merci

  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,

    Ce n'est pas ce qu'il faut faire. Il faut procéder à un regroupement.
    Etudie les fichiers XML et XSL suivants, ils effectuent ce que tu souhaites.

    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
    <?xml version="1.0" encoding="UTF-8"?>
    <?xml-stylesheet type="text/xsl" href="REGROUPEMENT_SUR_ATTRIBUT.XSL"?>
    <clients>
    	<client secteur="informatique">
    		<nom>nom aaa</nom>
    		<prenom>prenom aaa</prenom>
    	</client>
    	<client secteur="construction">
    		<nom>nom bbb</nom>
    		<prenom>prenom bbb</prenom>
    	</client>
    	<client secteur="construction">
    		<nom>nom eee</nom>
    		<prenom>prenom eee</prenom>
    	</client>
    	<client secteur="informatique">
    		<nom>nom ccc</nom>
    		<prenom>prenom ccc</prenom>
    	</client>
    	<client secteur="construction">
    		<nom>nom ddd</nom>
    		<prenom>prenom ddd</prenom>
    	</client>
    	<client secteur="imprimerie">
    		<nom>nom nnn</nom>
    		<prenom>prenom nnn</prenom>
    	</client>
    </clients>
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    	<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
     
    	<xsl:key name="regrouper" match="client" use="@secteur"/>
     
    	<xsl:template match="/">    
    		<clients>
    			<xsl:apply-templates select="clients/client[generate-id(.)=generate-id(key('regrouper', @secteur)[1])]">
    				<xsl:sort select="@secteur"/>
    			</xsl:apply-templates>
    		</clients>
    	</xsl:template>
     
    	<xsl:template match="client">
    		<xsl:param name="sect" select="@secteur"/>
    		<client>
    			<xsl:value-of select="count(//nom[parent::client[@secteur=$sect]])"/> - 	<xsl:value-of select="@secteur"/> :
    			<xsl:apply-templates select="//nom[parent::client[@secteur=$sect]]"/>
    		</client>
    		<br/>
    	</xsl:template>
     
    	<xsl:template match="nom">
    		<xsl:copy-of select="."/>
    		<xsl:copy-of select="../prenom"/>
    	</xsl:template>
     
    </xsl:stylesheet>

  5. #5
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    237
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 237
    Points : 88
    Points
    88
    Par défaut
    Merci

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

Discussions similaires

  1. [XPATH] Compter le nombre d'attributs qui ont une valeur donné
    Par doozor dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 26/05/2008, 10h06
  2. xsl+xpath--->selection et filtrage
    Par yos dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 27/09/2005, 11h15
  3. [XSL][XPATH] recopier les attributs d un élément mais pas le
    Par Triangle dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 26/08/2005, 16h07
  4. [XSL][Noob]Compter des noeuds de meme valeur??
    Par Devil666 dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 22/07/2005, 10h07
  5. [html][xsl]Problème valeur attribut html
    Par beho dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 16/04/2005, 13h37

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