[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:
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:
1 2
|
<xsl:value-of select="count(//LIG/@[name()])"/> |
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:
<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"