ThomasM: group by mit XSLT 1.0

Beitrag lesen

Hallo whine,

Hättest Du noch eine Idee, wie ich zusammenhängende Charts kennzeichnen kann. Also z.B. 50 = Hintergrundfarbe x, 60 = Hintergrundfarbe y? Ohne dass ich natürlich die 50 oder 60 kenne...

Ansatz über durchnummerierte Klassennamen, die dann über die Position ($pos_chart) zugewiesen werden:

<xsl:template match="/">
  <html>
    <head>
      <title>Test</title>
      <style type="text/css">
        .chart1 { color: #000; background-color: #FFC; }
        .chart2 { color: #000; background-color: #FC6; }
        .chart3 { color: #000; background-color: #3FF; }
        /* usw. */
      </style>
    </head>
    <body>
      <table>
        <tr>
          <th>Chart</th>
          <th>Fact</th>
          <th>Location</th>
        </tr>
        <xsl:for-each select="//Chart[generate-id() = generate-id(key('chart_group', .)[1])]">
          <xsl:sort select="." data-type="number" order="ascending"/>
          <xsl:variable name="akt_chart" select="."/>
          <xsl:variable name="pos_chart" select="position()"/>
          <xsl:for-each select="//Chart[. = $akt_chart]">
            <tr class="chart{$pos_chart}">
              <td>
                <xsl:value-of select="$akt_chart"/>
              </td>
              <td>
                <xsl:value-of select="preceding::Fact[1]"/>
              </td>
              <td>
                <xsl:value-of select="../../Coordinates"/>
              </td>
            </tr>
          </xsl:for-each>
        </xsl:for-each>
      </table>
    </body>
  </html>
</xsl:template>

Ergebnis:

<tr class="chart1">
  <td>50</td>
  <td>B</td>
  <td>50.6,14.4</td>
</tr>
<tr class="chart2">
  <td>66</td>
  <td>B</td>
  <td>50.7,14.5</td>
</tr>
<tr class="chart3">
  <td>77</td>
  <td>B</td>
  <td>50.6,14.4</td>
</tr>
<tr class="chart3">
  <td>77</td>
  <td>B</td>
  <td>50.7,14.5</td>
</tr>

Grüße,
Thomas