Lösungen zu Übung 9: Temperaturkurve Stuttgart 2015 (xsl:iterate)

Im Folgenden finden Sie die Lösungsdateien zu Übung 9 sowie zur Variante unter Temperaturkurve Stuttgart 2015.

Code-Beispiel: Lösungs-XSLT zu Übung 9.

<?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">
  <xsl:mode streamable="yes"/>
  <xsl:output method="text"/>
  <xsl:template match="year">
    <!-- Columns header -->
    <xsl:text>month; min temp; max temp; rainSum&#010;</xsl:text>
    <xsl:iterate select="month">
      <xsl:param name="rain" select="0.00" as="xs:decimal"/>
      <xsl:variable name="copy" select="copy-of(.)"/>
      <!-- für Erweiterung mit Summe über Regen einkommentieren -->
      <xsl:variable name="rainSum" select="$rain + xs:decimal($copy/raining/@value)"/>
      <xsl:value-of select="@name"/>; <xsl:value-of select="$copy/temperature/@min"/>; <xsl:value-of select="$copy//@max"/>; <xsl:value-of select="$rainSum"/>
      <xsl:text>&#010;</xsl:text>
      <xsl:next-iteration>
        <xsl:with-param name="rain" select="$rainSum"/>
      </xsl:next-iteration>
    </xsl:iterate>
  </xsl:template>
</xsl:stylesheet>

Code-Beispiel: Output-CSV zu Übung 9.

month; min temp; max temp; rainSum
january; -2.1; 3.2; 38
february; -1.2; 5.1; 73
march; 1.5; 9.2; 112
april; 4.5; 13.5; 166
may; 8.5; 18; 250
june; 11.7; 21; 343
july; 13.5; 23.3; 406
august; 13.3; 23; 482
september; 10.4; 19.8; 535
october; 6.4; 14.5; 576
november; 1.9; 8; 624
december; -1; 4.1; 665

Code-Beispiel: Lösungs-XSLT zu Übung 9 (Variante).

<?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">
  <xsl:mode streamable="yes"/>
  <xsl:output method="text"/>
  <xsl:template match="year">   
    <!-- Columns header -->
    <xsl:text>year; avg. min temp; avg max temp; rainSum&#010;</xsl:text>   
    <xsl:iterate select="month">
      <xsl:param name="rain" select="0.00" as="xs:decimal"/>
      <xsl:param name="min" select="0.00" as="xs:decimal"/>
      <xsl:param name="max" select="0.00" as="xs:decimal"/>
      <xsl:on-completion>
        <xsl:text>2015</xsl:text>;<xsl:value-of select="$min div 12"/>;<xsl:value-of select="$max div 12"/>;<xsl:value-of select="$rain"/>
        <xsl:text>&#010;</xsl:text>
      </xsl:on-completion>
      <xsl:variable name="copy" select="copy-of(.)"/>
      <!-- für Erweiterung mit Summe über Regen einkommentieren -->
      <xsl:variable name="rainSum" select="$rain + xs:decimal($copy/raining/@value)"/>
      <xsl:variable name="minSum" select="$min + xs:decimal($copy/temperature/@min)"/>
      <xsl:variable name="maxSum" select="$max+ xs:decimal($copy/temperature/@max)"/>
      <xsl:next-iteration>
        <xsl:with-param name="rain" select="$rainSum"/>
        <xsl:with-param name="min" select="$minSum"/>
        <xsl:with-param name="max" select="$maxSum"/>
      </xsl:next-iteration>
    </xsl:iterate>  
  </xsl:template>    
</xsl:stylesheet>

Code-Beispiel: Output-CSV zu Übung 9 (Variante).

year; avg. min temp; avg max temp; rainSum
2015;5.616666666666666667;13.558333333333333333;665
Tipp der data2type-Redaktion:
Zum Thema XSLT bieten wir auch folgende Schulungen zur Vertiefung und professionellen Fortbildung an: