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
 

Neue Beiträge

Zurück