|
|||
Termine in XML zusammenfassen via xslt
Moin zusammen,
ich bin relativ neu in der Materie und stehe nun vor der Aufgabe folgendes Thema zu lösen. Dies ist das Quelldokument, welches ich angeliefert bekomme: Code:
<tabelle> <vorschaupaarungen> <vorschaupaarung> <spieldatum>Fr. 27.01.2017</spieldatum> <spieluhrzeit>15:30</spieluhrzeit> <heimmannschaft>Wesel</heimmannschaft> <gastmannschaft>Stuttgart</gastmannschaft> </vorschaupaarung> <vorschaupaarung> <spieldatum>Sa. 28.01.2017</spieldatum> <spieluhrzeit>16:30</spieluhrzeit> <heimmannschaft>Hannover</heimmannschaft> <gastmannschaft>Nürnberg</gastmannschaft> </vorschaupaarung> <vorschaupaarung> <spieldatum>Sa. 28.01.2017</spieldatum> <spieluhrzeit>17:30</spieluhrzeit> <heimmannschaft>Hamburg</heimmannschaft> <gastmannschaft>Berlin</gastmannschaft> </vorschaupaarung> <vorschaupaarung> <spieldatum>Sa. 28.01.2017</spieldatum> <spieluhrzeit>17:30</spieluhrzeit> <heimmannschaft>Basel</heimmannschaft> <gastmannschaft>Wien</gastmannschaft> </vorschaupaarung> <vorschaupaarung> <spieldatum>So. 29.01.2017</spieldatum> <spieluhrzeit>17:45</spieluhrzeit> <heimmannschaft>Baltrum</heimmannschaft> <gastmannschaft>Zypern</gastmannschaft> </vorschaupaarung> <vorschaupaarung> <spieldatum>So. 29.01.2017</spieldatum> <spieluhrzeit>12:45</spieluhrzeit> <heimmannschaft>Sylt</heimmannschaft> <gastmannschaft>Helgoland</gastmannschaft> </vorschaupaarung> </vorschaupaarungen> </tabelle> Code:
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > <xsl:strip-space elements="*"/> <xsl:output method="xml" indent="yes" encoding="utf-8"/> <xsl:template match="/"> <doc xml:lang="de"> <xsl:comment>Termine</xsl:comment> <p class="T_termine_fussball"> <xsl:for-each select="tabelle/vorschaupaarungen/vorschaupaarung"> <xsl:if test="spieldatum=spieldatum"> <span class="C_termin"> <xsl:value-of select="normalize-space(substring(spieldatum,4,7))"/> </span> <span class="C_paarung"> <xsl:value-of select="heimmannschaft"/> - <xsl:value-of select="gastmannschaft"/> </span> </xsl:if> </xsl:for-each> </p> </doc> </xsl:template> </xsl:stylesheet> Hier ist es gewünscht, dass die Termine nach Datum sortiert werden. Also das Datum nur einmal auftaucht. Bei mir kommt aber leider - egal wie ich es auch versuche das bei raus: Code:
<?xml version="1.0" encoding="utf-8"?> <doc xml:lang="de"><!--Termine--> <p class="T_termine_fussball"> <span class="C_termin">27.01.</span> <span class="C_paarung">Wesel - Stuttgart</span> <span class="C_termin">28.01.</span> <span class="C_paarung">Hannover - Nürnberg</span> <span class="C_termin">28.01.</span> <span class="C_paarung">Hamburg - Berlin</span> <span class="C_termin">28.01.</span> <span class="C_paarung">Basel - Wien</span> <span class="C_termin">29.01.</span> <span class="C_paarung">Baltrum - Zypern</span> <span class="C_termin">29.01.</span> <span class="C_paarung">Sylt - Helgoland</span> </p> </doc> Code:
<?xml version="1.0" encoding="utf-8"?> <doc xml:lang="de"> <artikel><!--Termine--> <p class="T_termine_fussball"> <span class="C_termin">27.01.</span> <span class="C_paarung">Wesel - Stuttgart</span> <span class="C_termin">28.01.</span> <span class="C_paarung">Hannover - Nürnberg</span> <span class="C_paarung">Hamburg - Berlin</span> <span class="C_paarung">Basel - Wien</span> <span class="C_termin">29.01.</span> <span class="C_paarung">Baltrum - Zypern</span> <span class="C_paarung">Sylt - Helgoland</span> </p> </artikel> </doc> Ich komme auch durch die Suche im Web nicht großartig weiter - ich habe hier vermutlich nur einen Denkfehler. Vielleicht kann ja einer schnell Abhilfe leisten. Besten Dank im Voraus Marshall |
Sponsored Links |
|
|||
Das ist keine triviale Sache, da wäre es einfacher, wenn das schon bei der Ausgabe des XML berücksichtigt werden könnte.
Ansätze, wie man das machen kann: template:match="vorschaupaarung" und dort dann das datum in eine Variable speichern. Dann ein match="vorschaupaarung[spieldatum='$datumsVariable' und du bekommst alle Paarungen mit dem Datum. Das Problem dabei ist: Wie findest du die nächste Paarung, welche ein anderes Datum hat? Andere Möglichkeit: Wenn du im vorschaupaarung template bist zählst du wie viele andere Knoten mit dem Wert es gibt und wenn es mehr als 1 ist dann gib das Datum nicht mehr aus. Dabei musst du aber auch erst feststellen ob du dich nicht schon im ersten Datum befindest, weil dann musst du das Datum natürlich ausgeben. Zusammenfassung: Mit einem for-each wirst du meiner Meinung nach hier nicht weit kommen, da brauchst du ein template:match und dort dann die einzelnen Fälle abhandeln. Edit: Kannst du sicher sein, dass Elemente mit gleichem Datum immer nacheinander kommen? Dann müsstest du nur checken ob das vorige Element das selbe Datum hat und abhängig davon dann das Datum ausgeben. Geändert von cloned (08.02.2017 um 09:50 Uhr) |
Sponsored Links |
Stichwörter |
termine, xml, xslt |
Themen-Optionen | |
Ansicht | |
|
|
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
Inline Listenelement wird nicht richtig im background befüllt | SteveB | CSS | 3 | 28.04.2011 21:41 |
XML auf dem Server per XSLT in HTML transformieren | AndreasB | Serveradministration und serverseitige Scripte | 15 | 16.03.2011 16:20 |
Hilfsmittel zur Erstellung von XSLT - zur Transformation von XML zu HTML | AndreasB | (X)HTML | 2 | 23.11.2010 10:21 |
xhtml clientseitig aus xml und xslt | Ricochet | (X)HTML | 2 | 11.11.2005 21:19 |