Prüfung für Nachfolger
Benjamin
- xsl
Hallo,
ich habe aus einer xml-Datei eine Tabelle auf eine html-Seite transformiert.
Die xml-Datei sind vereinfacht in etwa so aus:
<element>
<Betreuer>Meyer</Betreuer>
<Patient>Klaus</Patient>
<Datum>1.11.08</Datum>
</element>
<element>
<Betreuer>Meyer</Betreuer>
<Patient>Peter</Patient>
<Datum>20.10.08</Datum>
</element>
<element>
<Betreuer>Schmidt</Betreuer>
<Patient>Martin</Patient>
<Datum>3.11.08</Datum>
</element>
<element>
<Betreuer>Müller</Betreuer>
....
Die Tabelle gibt mir jetzt eine Auflistung sortiert nach den Betreuern und den Patienten aus:
Betreuer Patient Datum
Meyer Klaus 1.11.08
Meyer Peter 20.10.08
Schmidt Martin 3.11.08
Müller ....
Ich möchte aber eine Trennzeile zwischen Meyer und Schmidt und für jeden weiteren Betreuer. Also so hier:
Betreuer Patient Datum
Meyer Klaus 1.11.08
Meyer Peter 20.10.08
--------------------------------
Schmidt Martin 3.11.08
--------------------------------
Müller ....
Wie mache ich das? Wie formuliere ich am besten die Bedingung und wie kann ich nach der Trennzeile die Tabelle fortsetzen?
Danke im Voraus,
Benjamin
@@Benjamin:
Die Tabelle gibt mir jetzt eine Auflistung sortiert nach den Betreuern und den Patienten aus:
Sortiert deine Transformation oder gehst du davon aus, dass die Daten bereits sortiert in der XML-Datei stehen?
Betreuer Patient Datum
Meyer Klaus 1.11.08
Meyer Peter 20.10.08Schmidt Martin 3.11.08
Müller ....
Das generierte Markup sollte also so aussehen:
<table>
<thead>
<tr>
<th>Betreuer</th><th>Patient</th><th>Datum</th>
</tr>
</thead>
<tbody>
<tr>
<td>Meyer</td><td>Klaus</td><td>1.11.08</td>
</tr>
<tr>
<td>Meyer</td><td>Peter</td><td>20.10.08</td>
</tr>
</tbody>
<tbody>
<tr>
<td>Schmidt</td><td>Martin</td><td>3.11.08</td>
</tr>
</tbody>
<tbody>
<tr>
<td>Müller</td><td>....</td><td></td>
</tr>
</tbody>
</table>
Die Trennlinien dann per CSS: 'border-top'/'border-bottom' für 'tbody'.
Live long and prosper,
Gunnar
@@Benjamin:
Die Tabelle gibt mir jetzt eine Auflistung sortiert nach den Betreuern und den Patienten aus:
Sortiert deine Transformation oder gehst du davon aus, dass die Daten bereits sortiert in der XML-Datei stehen?
Betreuer Patient Datum
Meyer Klaus 1.11.08
Meyer Peter 20.10.08Schmidt Martin 3.11.08
Müller ....
Das generierte Markup sollte also so aussehen:
<table>
<thead>
<tr>
<th>Betreuer</th><th>Patient</th><th>Datum</th>
</tr>
</thead>
<tbody>
<tr>
<td>Meyer</td><td>Klaus</td><td>1.11.08</td>
</tr>
<tr>
<td>Meyer</td><td>Peter</td><td>20.10.08</td>
</tr>
</tbody>
<tbody>
<tr>
<td>Schmidt</td><td>Martin</td><td>3.11.08</td>
</tr>
</tbody>
<tbody>
<tr>
<td>Müller</td><td>....</td><td></td>
</tr>
</tbody>
</table>
>
> Die Trennlinien dann per CSS: 'border-top'/'border-bottom' für 'tbody'.
>
> Live long and prosper,
> Gunnar
Hallo Gunnar,
die Daten sortiere ich mittels Sort-Funktion.
Die Datenreihen habe ich allerdings bislang nur in einer Tabelle:
~~~html
<table>
<thead>
<tr>
<th>Betreuer</th><th>Patient</th><th>Datum</th>
</tr>
</thead>
<tbody>
<tr>
<td>Meyer</td><td>Klaus</td><td>1.11.08</td>
</tr>
<tr>
<td>Meyer</td><td>Peter</td><td>20.10.08</td>
</tr>
<tr>
<td>Schmidt</td><td>Martin</td><td>3.11.08</td>
</tr>
<tr>
<td>Müller</td><td>....</td><td></td>
</tr>
</tbody>
</table>
Ich suche ja noch den Weg, um die Tabelle trennen zu können oder einfach eine Leerzeile einzufügen. Noch eine Idee?
Hallo,
Ich suche ja noch den Weg, um die Tabelle trennen zu können oder einfach eine Leerzeile einzufügen. Noch eine Idee?
Ich hätte 2 Vorschläge:
1. Zuerst gruppieren, damit alle Betreuer nur noch einmal vorkommen. Diese kannst du dann trennen. Die Zweite Abfrage auf deine Tabelle gibt dann pro gruppierten Betreuer alle Einträge aus.
2. Alle Einträge in eine Variable sortieren und diese danach ausgeben. Hier kannst du mit position() und postion() +1 überprüfen, ob der Wert/ Inhalt von Betreuer gleich ist.
bydey
Hallo dey,
- Alle Einträge in eine Variable sortieren und diese danach ausgeben. Hier kannst du mit position() und postion() +1 überprüfen, ob der Wert/ Inhalt von Betreuer gleich ist.
Ok, aber wie genau mache ich das. daran scheitere ich leider :(
Danke, Benjamin
Hi .
Im Detail kann ich es dir auch nicht erläuten, da ich exakt dein Problem noch nicht hatte. Ich wurde es so angehen:
Hi .
Im Detail kann ich es dir auch nicht erläuten, da ich exakt dein Problem noch nicht hatte. Ich wurde es so angehen:
- ein xsl:variable tag öffnen
- dein xsl:select ausführen
- im der Variable noch ein xsl:sort ausführen
Ich allerdings nicht sicher, ob die Variable jetzt auch die neuen position() setzt, so dass du auch benachbarte Werte vergleichen kannst.
Bydey
Hallo,
falls es noch jemanden interessiert. Ich habe eine Lösung gefunden:
und zwar habe ich:
2 Variablen angelegt:
Vorgaenger:
<xsl:value-of select="preceding-sibling::node()[1]/Betreuer"/>
Name:
<xsl:value-of select="Betreuer"/>
dann eine when-Funktion:
<xsl:choose>
<xsl:when test="$Name = $NameVor">
<xsl:call-template name="AnsichtBetreuer"/> <!-- mein Template um die Daten auszulesen -->
</xsl:when>
<xsl:when test="$NameVor=''"> <!-- um für den ersten Eintrag nicht schon eine Trennline zu erzeugen-->
<xsl:call-template name="AnsichtBetreuer"/>
</xsl:when>
<xsl:otherwise>
<xsl:call-template name="AnsichtBetreuer2"/> <!-- das gleiche Template nur mit anderen style (bottom-top-widht usw.) -->
</xsl:otherwise>
Ein Problem hatte ich nur noch mit der Formatierung der Tabellenzeilen. Die style-Definitionen konnte ich nicht für die Zeile angeben, ich musste es für jede einzelne Zelle in der betreffenden Zeile hinterlegen.. weiß nicht genau woran das liegt.
Danke für die Hilfe!
Benjamin
Hallo,
falls es noch jemanden interessiert. Ich habe eine Lösung gefunden:
und zwar habe ich:
2 Variablen angelegt:
Vorgaenger:
<xsl:value-of select="preceding-sibling::node()[1]/Betreuer"/>
Name:
<xsl:value-of select="Betreuer"/>
> dann eine when-Funktion:
>
> ~~~xml
> <xsl:choose>
> <xsl:when test="$Name = $NameVor">
> <xsl:call-template name="AnsichtBetreuer"/> <!-- mein Template um die Daten auszulesen -->
> </xsl:when>
> <xsl:when test="$NameVor=''"> <!-- um für den ersten Eintrag nicht schon eine Trennline zu erzeugen-->
> <xsl:call-template name="AnsichtBetreuer"/>
> </xsl:when>
> <xsl:otherwise>
> <xsl:call-template name="AnsichtBetreuer2"/> <!-- das gleiche Template nur mit anderen style (bottom-top-widht usw.) -->
> </xsl:otherwise>
>
So, nun ergibt sich doch noch ein Problem, vielleicht kann mir jemand helfen. Die Sortierabfrage sortiert nur die Ausgabezeilen der Tabelle. Die XML-Datei ist davon unberührt (In meinem bisherigen Beispiel hatte ich nur mit einer sortierten Datenquelle zu tun), leider sind die Ausgangsdaten unsortiert. Kann ich die Quelldaten sortieren, z.B. zwischenspeichern? oder wie muss ich vorgehen?