Gruppierungsproblem mit XSL

lukasS

Erfahrenes Mitglied
Hallo,

ich habe eine XML-Datei die ich über XSL auslesen möchte:
Code:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="d:\\demo.xsl"?>
<A>
  <B>
    <C>
      <DATA name="art">NAME 1</DATA>
      <D name="wert">
        <C name="wert">
          <DATA name="art">AUTO 1</DATA>
          <DATA name="attribut">HAMMER 1</DATA>
        </C>
        <C name="wert">
          <DATA name="art">ELEMENT 4</DATA>
          <DATA name="attribut">APFEL 4</DATA>
        </C>
      </D>
    </C>
    <C>
      <DATA name="art">NAME 2</DATA>
      <D name="wert">
        <C name="wert">
          <DATA name="art">AUTO 3</DATA>
          <DATA name="attribut">HAMMER 2</DATA>
        </C>
        <C name="wert">
          <DATA name="art">ELEMENT 1</DATA>
          <DATA name="attribut">APFEL 5</DATA>
        </C>
      </D>
    </C>
    <C>
      <DATA name="art">NAME 1</DATA>
      <D name="wert">
        <C name="wert">
          <DATA name="art">AUTO 2</DATA>
          <DATA name="attribut">HAMMER 3</DATA>
        </C>
        <C name="wert">
          <DATA name="art">ELEMENT 1</DATA>
          <DATA name="attribut">APFEL 4</DATA>
        </C>
      </D>
    </C>
  </B>
</A>

Ich möchte alle Elemente (Element DATA) die den Attributwert
name="art" und den gleichen Text haben gruppieren, aber nur den den
obersten in der Hierarchiestufe, also alle Elemente mit dem Text "NAME". Die XML-Struktur kann leider nicht geändert werden.
Ich habe dazu im Internet eine XSL-Datei gefunden, damit klappt das
ganz gut, leider liest die mir auch die unterstehenden Elemente aus,
also AUTO und ELEMENT. Hier ist die:

Code:
<?xml version="1.0"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/
Transform">

  <xsl:output method="html" indent="no"/>

  <xsl:key name="arten" match="C" use="DATA[@name='art']"/>

  <xsl:template match="/">
    <table border="1">
      <xsl:for-each select="//C[generate-id(.)=generate-
id(key('arten', DATA)[1])]">
        <xsl:sort select="DATA"/>
        <xsl:for-each select="key('arten', DATA)">
          <tr>
            <xsl:if test="position() = 1">
              <td>
                <xsl:attribute name="rowspan">
                  <xsl:value-of select="count(key('arten', DATA))"/>
                </xsl:attribute>
                  <xsl:value-of select="DATA[@name='art']"/>
              </td>
            </xsl:if>
          </tr>
        </xsl:for-each>
      </xsl:for-each>
    </table>
  </xsl:template>

</xsl:stylesheet>

Da ich leider nicht mehr als minimale Grundkenntnisse von XSL habe,
wollte ich fragen, was ich hier ändern soll? Kann mir vielleicht
jemand ein Tipp geben?

Danke schonmal

Gruß

Lukas
 
Zurück