2010-06-03 15 views
0

I possède une variable contenant:XSLT 1.0 élément de comptage avec la même valeur dans un attribut, et la présenter

<col p1="Newman" p2="Paul"/> 
... 
<col p1="Newman" p2="Paolo"/> 
<col p1="Newman" p2="Paul"/> 

i wold en sortie une table dans la première colonne la valeur de p2 et dans le second le nombre de fois qu'il apparaît. Pour chaque valeur de p2 devrais-je avoir seulement une ligne.

<table> 
<tr><td>p2</td><td>num</td></tr> 
<tr><td>Pault</td><td>2</td> 
... 
<tr><td>Paolo</td><td>1</td> 
</table> 

Répondre

0

Facile avec une clé XSL.

<!-- index all <col> elements by their @p2 attribute --> 
<xsl:key name="kColByFirstname" match="col" use="@p2" /> 

<xsl:template match="/RootElement"> 
    <table> 
    <tr> 
     <td>p2</td><td>num</td> 
    </tr> 
    <!-- select the respective first <col> of each group --> 
    <xsl:apply-templates select="col[ 
     generate-id() = generate-id(key('kColByFirstname', @p2)[1]) 
    ]" /> 
    </table> 
</xsl:template> 

<xsl:template match="col"> 
    <tr> 
    <!-- output the current value of @p2 and its group count --> 
    <td><xsl:value-of select="@p2"/></td> 
    <td><xsl:value-of select="count(key('kColByFirstname', @p2))" /></td> 
    </tr> 
</xsl:template> 
+0

i essayer mais pour chaque valeur de p2 il ara plus d'une rangée exemple Paul Paul mais j'ai besoin seulement un – Erick

+0

@Erick: Le code fonctionne pour moi. – Tomalak