xsl:mode on-no-match="fail"
Übung 1
Nutzen Sie on-no-match="fail"
, um alle Elemente der XML-Datei openWeather.xml vom Englischen ins Deutsche zu übersetzen. Als Output ist folgende XML-Datei zu erzeugen:
Code-Beispiel: Output-Vorgabe zu Übung 1 (Auszug).
<wetterdaten>
<element>
<stadt id="2950159" name="Berlin">
<koordinaten lon="13.41" lat="52.52"/>
<Land>DE</Land>
<sonne rise="2015-12-08T07:03:45" set="2015-12-08T14:52:40"/>
</stadt>
<temperatur value="284.15" min="284.15" max="284.15" unit="kelvin"/>
<luftfeuchtigkeit value="76" unit="%"/>
<luftdruck value="1031" unit="hPa"/>
<wind>
<Geschwindigkeit value="3.1" name="Light breeze"/>
<boeen/>
<richtung value="150" code="SSE" name="South-southeast"/>
</wind>
<wolken value="0" name="clear sky"/>
<sicht/>
<faellung mode="no"/>
<wetter number="800" value="Sky is Clear" icon="01d"/>
<zeitpunkt value="2015-12-08T11:20:00"/>
</element>
...
</wetterdaten>
Output nach Anwendung der Transformation zur Übersetzung der Elemente von Englisch nach Deutsch.
Verwenden Sie das Transformationsszenario [Übung 1] on-no-match="fail" (XML >> XML)
(siehe die Erläuterungen zu den Übungen) mit der folgenden XSLT-Datei:
Code-Beispiel: Stylesheet für Übung 1 zu xsl:mode on-no-match="fail".
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:math="http://www.w3.org/2005/xpath-functions/math" exclude-result-prefixes="xs math" version="3.0">
<!--AUFGABE: Nutzen Sie on-no-match="fail", um alle Elemente der XML-Datei vom Englischen ins Deutsche zu übersetzen. Da die XML-Datei sehr groß ist, wurde für einige Elemente bereits ein Default-Template angelegt, sodass nur noch für die unten genannten Elemente ein Template erzeugt werden muss.-->
<!--TODO: Streaming-Modus definieren und on-no-match angeben.-->
<!--Rootelement-->
<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>
<xsl:template match="text()">
<xsl:copy-of select="." />
</xsl:template>
<!--Beispiel-->
<xsl:template match="cityWeather">
<wetterdaten>
<xsl:copy-of select="@*" />
<xsl:apply-templates />
</wetterdaten>
</xsl:template>
<!--TODO: Templates für current, city, coord, country und sun anlegen.-->
<!--Default-Template für alle restlichen Knoten.-->
<xsl:template match="temperature | humidity | pressure | wind | speed | gusts | direction | clouds | visibility | precipitation | weather | lastupdate" />
</xsl:stylesheet>
Erweiterung
Löschen Sie das Template für city
aus Ihrem Stylesheet und wenden Sie das Transformationsszenario [Übung 1] on-no-match="fail" (XML >> XML)
erneut auf die XML-Datei openWeather.xml an.
Was passiert? Und warum?
Warum ist es nicht möglich, zusätzlich zu den Elementen ebenfalls die Attribute zu übersetzen?
Tipps
Template für das Root-Element
Denken Sie daran, auch für das Root-Element ein entsprechendes Template <xsl:template match="/">
anzulegen.
Template für Text-Knoten
Beachten Sie, dass für die Text-Knoten (text()
) ebenfals ein Template definiert werden muss.
Lösung
Das vollständige Output-XML und das Lösungsstylesheet finden Sie unter Lösungen zu Übung 1 — xsl:mode on-no-match="fail".
<< zurück | vor >> |
Tipp der data2type-Redaktion: Zum Thema XSLT bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an: |