Hallo alle miteinander. Ich hänge gerade an einer XSLT Übungsaufgabe fest:
Folgendes XML:
Soll in folgendes XML umgewandelt werden:
Ziel ist dass nur noch die Züge angegeben werden, die mindestens 5 Minuten Verspätung haben, also wo 'voraussichtlich' - 'planmaessig' >= 5 Minuten ist.
Die Umformung soll nur durch XSLT erfolgen. Mein bisheriger Lösungsansatz funktioniert nicht, wahrscheinlich habe ich die Grundsätze von XSLT garnicht richtig verstanden.
Meine (falsche) Lösung:
Ich dachte dass meine Anweisung
zuerst ausgeführt wird und dadurch die Variablen erstellt werden, und danach im zweiten Template die Ausgabe erfolgt. Dem ist aber nicht so, ich erhalte den Fehler "Variable oder Parameter 'vorr' ist nicht definiert".
Vorschläge ?
Folgendes XML:
Code:
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet href="exam2_1.xsl" type="text/xsl" ?> <ankunftszeiten> <zug> <nummer>EC 267</nummer> <typ>EC</typ> <NächsterHalt> <bahnhof>Bruchsal</bahnhof> <ankunft art="planmaessig">18:17</ankunft> <ankunft art="voraussichtlich">18:26</ankunft> </NächsterHalt> </zug> <zug> <nummer>ICE 872</nummer> <typ>ICE</typ> <NächsterHalt> <bahnhof>Frankfurt(Main)Hbf</bahnhof> <ankunft art="planmaessig">18:17</ankunft> <ankunft art="voraussichtlich">18:18</ankunft> </NächsterHalt> </zug> </ankunftszeiten>
Code:
<?xml version="1.0" encoding="UTF-8"?> <ankunftszeiten> <zug> <nummer>EC 267</nummer> <typ>EC</typ> <NächsterHalt> <bahnhof>Bruchsal</bahnhof> <ankunft art="planmaessig">18:17</ankunft> <ankunft art="voraussichtlich">18:26</ankunft> </NächsterHalt> </zug> </ankunftszeiten>
Die Umformung soll nur durch XSLT erfolgen. Mein bisheriger Lösungsansatz funktioniert nicht, wahrscheinlich habe ich die Grundsätze von XSLT garnicht richtig verstanden.
Meine (falsche) Lösung:
Code:
<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml"/> <xsl:template match="ankunftszeiten"> <xsl:copy> <xsl:apply-templates select="zug/NächsterHalt/ankunft"/> <xsl:apply-templates select="zug"/> </xsl:copy> </xsl:template> <xsl:template match="ankunft"> <xsl:if test="contains(@art, 'planmaessig')"> <xsl:variable name="plan_hour" select="substring-before(., ':')"/> <xsl:variable name="plan_minutes" select="substring-after(., ':')"/> <xsl:variable name="plan" select="$plan_hour * 60 + $plan_minutes"/> </xsl:if> <xsl:if test="contains(@art, 'voraussichtlich')"> <xsl:variable name="vorr_hour" select="substring-before(., ':')"/> <xsl:variable name="vorr_minutes" select="substring-after(., ':')"/> <xsl:variable name="vorr" select="$vorr_hour * 60 + $vorr_minutes"/> </xsl:if> </xsl:template> <xsl:template match="zug"> <xsl:if test="($vorr - $plan) > 5"> <xsl:copy-of select="."/> </xsl:if> </xsl:template> </xsl:stylesheet>
Code:
<xsl:apply-templates select="zug/NächsterHalt/ankunft"/>
Vorschläge ?
Comment