Zusammenfassung bei gleicher Bedingung in einer Zeile
ben
- xsl
0 Thomas J.S.0 Ben0 Thomas J.S.0 Ben
Hallo,
der Thementitel ist irgendwie unglücklich, mir fällt aber auch nix anderes ein.
ich habe folgendes Problem:
meine xml Datei sieht vereinfacht in etwa so aus:
<tables>
<table>
<name>Klaus</name>
<datum>01.03.2009</datum>
</table>
<table>
<name>Klaus</name>
<datum>03.03.2009</datum>
</table>
<table>
<name>Klaus</name>
<datum>03.03.2009</datum>
</table>
<table>
<name>Erwin</name>
<datum>01.03.2009</datum>
<senden>J</senden>
</table>
<table>
<name>Erwin</name>
<datum>01.03.2009</datum>
<senden>J</senden>
</table>
<table>
<name>Erwin</name>
<datum>02.03.2009</datum>
<senden>J</senden>
</table>
...
</tables>
Ich möchte nun eine Tabelle erstellen, mit einer Zeile für Klaus und einer für Erwin usw. In der Tabelle soll mir angezeigt werden, wie oft Erwin und Klaus an einem Tag etwas gesendet haben:
Nutzer 1.3. 2.3. 3.3
Klaus 1 - 2
Erwin 2 1 -
Ich bin am verzweifeln. Ich bekomme die Tabelle leider nur so hin:
Nutzer 1.3 2.3 3.3
Klaus 1
Klaus 1
Klaus 1
Erwin 1
usw.
wie schaffe ich es diese Werte in eine Zeile zusammenzufügen?
Danke schonmal im Voraus!
Hallo,
der Thementitel ist irgendwie unglücklich, mir fällt aber auch nix anderes ein.
ich habe folgendes Problem:
Ich möchte nun eine Tabelle erstellen, mit einer Zeile für Klaus und einer für Erwin usw. In der Tabelle soll mir angezeigt werden, wie oft Erwin und Klaus an einem Tag etwas gesendet haben:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:key name="datum" match="tables/table" use="datum"/>
<xsl:key name="name" match="tables/table" use="name"/>
<xsl:key name="dn" match="tables/table" use="concat(name,datum)"/>
<xsl:template match="/">
<html>
<head>
<title>Gruppierung</title>
</head>
<body>
<table>
<tr>
<td>Nutzer</td>
<xsl:for-each select="tables/table[generate-id() = generate-id(key('datum', datum)[1])]">
<td>
<xsl:value-of select="datum"/>
</td>
</xsl:for-each>
</tr>
<xsl:for-each select="tables/table[generate-id() = generate-id(key('name', name)[1])]">
<tr>
<td>
<xsl:value-of select="name"/>
</td>
<xsl:for-each select="key('name', name)">
<xsl:variable name="n" select="name"/>
<td>
<xsl:choose>
<xsl:when test="current()[generate-id() = generate-id(key('dn', concat(name,datum)))]">
<xsl:value-of select="count(key('datum', datum)[name = $n])"/>
</xsl:when>
<xsl:otherwise>-</xsl:otherwise>
</xsl:choose>
</td>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
ausgabe ist:
Nutzer 01.03.2009 03.03.2009 02.03.2009
Klaus 1 2 -
Erwin 2 - 1
Was du damit nicht machen kannst, ist eine Sortierung nach Datum und/oder Name
Grüße
Thomas
Hallo,
ausgabe ist:
Nutzer 01.03.2009 03.03.2009 02.03.2009
Klaus 1 2 -
Erwin 2 - 1Was du damit nicht machen kannst, ist eine Sortierung nach Datum und/oder Name
Grüße
Thomas
Hallo Thomas,
danke für den Code, leider funktioniert er nur für das angezeigte Beispiel. Sobald ich mehr Daten in meiner XML Datei habe stimmt die Anzahl nicht mit den Tagen überein und er schreibt die Daten z.T. einfach hinter die Tabelle..
Ich kann meine XML Datei bei der Ausgabe nach dem Datum sortieren, das wäre nicht das Problem. Es ist außerdem nachezu sicher, dass jeden Tag etwas gesendet wird (über 60 Nutzer von denen mindestens 10 täglich etwas senden). Es würde mir reichen (falls das einfacher ist), dass an den Tagen, an denen etwas gesendet wurde, nur ein X eingetragen wird. Die Anzahl ist nicht zwingend erforderlich.
Leider bin ich mit der generate-id und key Funktion nicht vertraut.. Ich weiß also nicht, wie ich da selber ansetzen kann :(
Danke schonmal für deine Hilfe!
Ben
Hallo,
danke für den Code, leider funktioniert er nur für das angezeigte Beispiel. Sobald ich mehr Daten in meiner XML Datei habe stimmt die Anzahl nicht mit den Tagen überein und er schreibt die Daten z.T. einfach hinter die Tabelle..
ehmm ... ja, das habe ich übersehen.
hier der coee dann mal nach Datum/Namen sortiert, mit Zählung von User/Tag usw.
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:key name="datum" match="tables/table" use="datum"/>
<xsl:key name="name" match="tables/table" use="name"/>
<xsl:template match="/">
<html>
<head>
<title>Gruppierung</title>
</head>
<body>
<table border="1">
<tr>
<td>Nutzer</td>
<xsl:for-each select="tables/table[generate-id() = generate-id(key('datum', datum)[1])]">
<xsl:sort select="datum" />
<td>
<xsl:value-of select="datum"/>
</td>
</xsl:for-each>
</tr>
<xsl:for-each select="tables/table[generate-id() = generate-id(key('name', name)[1])]">
<xsl:sort select="name"/>
<xsl:variable name="n" select="name"/>
<tr>
<td>
<xsl:value-of select="name"/>
</td>
<xsl:for-each select="/tables/table[generate-id() = generate-id(key('datum', datum)[1])]">
<xsl:sort select="datum" />
<xsl:choose>
<xsl:when test="key('datum', datum)[name = $n]">
<td>
<xsl:value-of select="count(key('datum', datum)[name = $n])"/>
</td>
</xsl:when>
<xsl:otherwise>
<td>-</td>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
Grüße
Thomas
ehmm ... ja, das habe ich übersehen.
hier der coee dann mal nach Datum/Namen sortiert, mit Zählung von User/Tag usw.
Grüße
Thomas
Astrein! Allerbesten Dank!! Funktioniert prima