Bruge Key til accumulering, selvom en node mangler
Hej folkensJeg troede jeg avde fået dette til at virke, men det gør det ikke alliegvel :( ikke helt
Jeg har en lille XML fil indeholdende en fejlrapport:
<?xml version="1.0" encoding="iso-8859-1"?>
<report>
<errors>
<error>
<line>1</line>
<message>fejlbeskrivelse 1</message>
<code>1</code>
</error>
<error>
<line>2</line>
<message>fejlbeskrivelse 2</message>
<code>1</code>
</error>
<error>
<line>3</line>
<message>fejlbeskrivelse 3</message>
</error>
<error>
<line>4</line>
<message>fejlbeskrivelse 4</message>
</error>
</errors>
</report>
Nogle gange indeholder en besked en fejlkode, andre gange ikke. Beskeden behøver ikke være den samme selvom fejlkoden er den samme.
Jeg vil så gerne lave en sammentælling af antallet af fejl med samme kode, samt en optælling af alle fejl uden nogen kode.
Sammentællingen har jeg lavet, dog viser den en ny indgang for hvert tag hvor der ikke er nogen kode tag.
Jeg kan ikke ændre i XML filen, det er ikke en jeg selv laver :( (den er her i en skrabet version)
Min xslfil ser således ud:
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- the key definition is the grouping -->
<xsl:key name="errorCode" match="error" use="code"/>
<xsl:template match="/report">
<html>
<body>
<xsl:apply-templates select="errors" mode="accumulatedErrors"/>
</body>
</html>
</xsl:template>
<xsl:template match="errors" mode="accumulatedErrors">
<h3>Accumulated Errors</h3>
<table border="1">
<tr>
<th>Error code</th>
<th>Occurences</th>
</tr>
<!-- now you take the first row of every group -->
<xsl:for-each select="error[count(.|key('errorCode',code)[1]) = 1]">
<tr>
<td>
<!-- put out the errocode -->
<xsl:value-of select="code"/>
</td>
<td>
<!-- and the sum of all rows with this event -->
<xsl:value-of select="count(key('errorCode',code))"/>
</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
</xsl:stylesheet>