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] Compter des occurences d'attributs


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    242
    242 est déconnecté
    Membre à l'essai
    Inscrit en
    Novembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 14
    Points : 11
    Points
    11
    Par défaut [XSLT] Compter des occurences d'attributs
    Bonjour,

    J'ai un fichier XML en entrée dont je ne connais pas à priori la totalité de la DTD, Je souhaiterais compter le nombre d'occurences des noms d'attributs pour une balise particulière:
    fichier XML:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <DOC>
    <PAG>
    <LIG ATT1="a" ATT2="b">....</LIG>
    <LIG ATT1="c" ATT3="d">....</LIG>
    </PAG>
    <PAG>
    <BLOC>
    <LIG ATT2="x" ATT5="d"></LIG>
    </BLOC>
    </PAG>
    </DOC>
    En sortie je souhaiterais
    <LIG> <ATTRIBUTE OCCURENCE="2" > ATT1</ATTRIBUTE>
    <ATTRIBUTE OCCURENCE="3" > ATT2</ATTRIBUTE>
    <ATTRIBUTE OCCURENCE="1" > ATT3</ATTRIBUTE>
    <ATTRIBUTE OCCURENCE="1" > ATT5</ATTRIBUTE>
    </LIG>

    J'ai déjà résolu l'énumération des attributs distincts, maintenant je souhaite compter les occuences de chaque attribut.

    J'ai essayé ca (name() contenant le nom de l'attribut dans le contecte courant) mais obtient une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <xsl:value-of select="count(//LIG/@[name()])"/>

  2. #2
    Expert éminent
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut Re: [XSLT] Compter des occurences d'attributs
    Bonjour,

    Justement non, name() renvoie le nom du noeud contextuel, c'est à dire le noeud évalué par le prédicat dans l'expression XPath. Pour obtenir le noeud courant (celui du template ou du for-each), il faut utiliser la fonction XPath current(). Une version correcte devrait donc être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <xsl:value-of select="count(//LIG/@*[name() = name(current())]"/>
    En clair : "compter tous les attributs des éléments LIG dont le nom est égal à celui du noeud courant"
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  3. #3
    242
    242 est déconnecté
    Membre à l'essai
    Inscrit en
    Novembre 2005
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 14
    Points : 11
    Points
    11
    Par défaut
    Bingo,

    Merci, je n'avais pas saisi la subtilité entre name et name(current())

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

Discussions similaires

  1. compter des occurences dans une colonne (dimension)
    Par brubast dans le forum QlikView
    Réponses: 3
    Dernier message: 04/02/2015, 11h42
  2. [XSLT] compter des lignes / 2 colonnes
    Par lecelte dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 29/09/2009, 16h13
  3. [XSLT] Mettre des données dans un attributs de balise html
    Par Jimmy_S dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 03/01/2008, 16h04
  4. [débutante][XSLT] Afficher des attributs
    Par Lith6 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 13/11/2007, 23h30
  5. [XSLT] Dédoublonner des attributs
    Par 242 dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 10/11/2005, 15h44

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