Andreas: Tabellenzeilen farbig markieren

Guten Abend zusammen,

wie kann ich am nachfolgenden Beispiel die Hintergrundfarbe der Zeilen verändern, sobald sich der Wert in "Data/Data1" verändert? Das ganze soll der Übersichtlichkeit dienen...

<xsl:for-each select="/bla/blubb">
   <xsl:sort select="Data/Data1" order="ascending"/>
   <xsl:sort select="Settings/Setting" order="descending"/>

<xsl:if test="Data/Data1[@Id != '']">

<tr>
           <td align="center"><xsl:value-of select="Data/Data1"/></td>
       <td align="center"><xsl:value-of select="Settings/Setting"/></td>
        </tr>
   </xsl:if>
      </xsl:for-each>

Ich denke mal, dass kann man mit xsl:choose realisieren, jedoch weiss ich nicht, wie ich dass mit den Farben machen soll. Evtl. "bgcolor="xxxx"" hochzählen? Aber wie?

Danke im Voraus.

mfg
Andreas

  1. Hallo,

    wie kann ich am nachfolgenden Beispiel die Hintergrundfarbe der Zeilen verändern, sobald sich der Wert in "Data/Data1" verändert?

    Das kann ich dir auch nicht sagen, denn du prüfst nicht den Wert von  "Data/Data1" sondern lediglich ob das Attribut "Id" vom "Data/Data1" (nicht) leer ist, daher weiss ich nicht, was du eigentlich meinst bzw. erreichen willst.

    Grüße
    Thomas

    1. Mit dieser Prüfung lasse ich Zeilen nicht anzeigen, bei denen "Data/Data1" nicht existiert.
      Bei der Tabelle, die aus meiner Abfrage herauskommt, würde ich gerne die Zeilen farbig markieren. Und zwar wie folgt...
      (Beispiel)

      Data1    Setting
      1            2
      1            3
      1            5
      2            6
      2            5
      2            234
      2            234
      2            2344

      Hier sollten nun alles Zeilen, die bei Data1 eine "1" haben, eine andere Farbe haben, als bei "2", usw...

      (Bin nicht gut im erklären...)

      mfg
      Andreas

      1. Hallo,

        Mit dieser Prüfung lasse ich Zeilen nicht anzeigen, bei denen "Data/Data1" nicht existiert.

        Eben. Nicht aber ob sich der Wert im "Data1" verändert hat. (Gut, ich weiß nicht was bei dir "der Wert hat sich vereändert" wirklich bedeutet.)

        Bei der Tabelle, die aus meiner Abfrage herauskommt, würde ich gerne die Zeilen farbig markieren. Und zwar wie folgt...
        (Beispiel)

        Data1    Setting
        1            2
        1            3
        1            5
        2            6
        2            5
        2            234
        2            234
        2            2344

        Hier sollten nun alles Zeilen, die bei Data1 eine "1" haben, eine andere Farbe haben, als bei "2", usw...

        Verstehe. Ich bin nicht so sehr für allzu bunte Tabellen, deshalb denke ich dass zwei Farben, die sich pro Gruppe abwechseln, reichen würde.
        Mit XSLT 2.0 kannst du das Problem so lösen:
        ---------------------------------------------
        <xsl:for-each-group select="bla/blubb" group-by="Data/Data1[@Id != '']">
         <xsl:sort select="current-grouping-key()" order="ascending"/>
         <xsl:sort select="Settings/Setting" order="descending"/>
         <xsl:variable name="pos" select="position()"/>
         <xsl:for-each select="current-group()">
          <tr class="color{$pos mod 2}">
           <td align="center">
            <xsl:value-of select="Data/Data1"/>
           </td>
           <td align="center">
            <xsl:value-of select="Settings/Setting"/>
           </td>
          </tr>
         </xsl:for-each>
        </xsl:for-each-group>
        ---------------------------------------------

        Mit XSLT 1.0 sieht die Lösung so aus:

        ---------------------------------------------
        <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
         <xsl:key name="data" match="bla/blubb" use="Data/Data1[@Id != '']"/>

        ...

        <xsl:for-each select="bla/blubb[generate-id(.) = generate-id(key('data', Data/Data1[@Id != '']))[1]]">
         <xsl:variable name="pos" select="position()" />
         <xsl:for-each select="key('data', Data/Data1[@Id != ''])">
          <xsl:sort select="Data/Data1" order="ascending"/>
          <xsl:sort select="Settings/Setting" order="descending"/>
          <tr class="color{$pos mod 2}">
           <td align="center">
            <xsl:value-of select="Data/Data1"/>
           </td>
           <td align="center">
            <xsl:value-of select="Settings/Setting"/>
           </td>
          </tr>
         </xsl:for-each>
        </xsl:for-each>
        ...

        </xsl:stylesheet>
        ---------------------------------------------

        In Beiden Fällen brauchst du nur zwei Fraben für  class="color1" und für  class="color0" zu bestimmen.

        Grüße
        Thomas