Announcement

Collapse
No announcement yet.

Probleme mit einer XSL-Tabelle

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Probleme mit einer XSL-Tabelle

    Hallo

    ich habe eine Tabelle in folgendem Format.

    HTML Code:
    <?xml version="1.0" encoding="iso-8859-1"?>
    <?xml-stylesheet type="text/xsl" href="products.xsl"?>
    
    <OLProduct>
        <Product>
            <Artikelnummer></Artikelnummer>
            <Hersteller></Hersteller>
            <Artikelgruppe></Artikelgruppe>
            <Variante>
               <Produktnummer></Produktnummer>
           </Variante>
        </Product>
    .
    .
    .
        <Product>
            <Artikelnummer></Artikelnummer>
            <Hersteller></Hersteller>
            <Artikelgruppe></Artikelgruppe>
            <Variante>
               <Produktnummer></Produktnummer>
           </Variante>
        </Product>
    </OLProduct>
    Diese xml-Datei umfasst mehrere 100 Artikel,wo jede Artikelnummer nochmal an die 60 Produktnummern hat.

    Ich möchte nun gerne diese xml-Datei als Tabelle darstellen. Artikelnummer, Hersteller und Artikelgruppe sind kein Problem.

    Dafür nutze ich folgende xsl:

    HTML Code:
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
      <html>
      <body>
      <h2>Bestandsliste aus WWS</h2>
        <table border="1">
          <tr>
            <th>Artikelnummer</th>
            <th>Hersteller</th>
            <th>Artikelgruppe</th>
          </tr>
          <xsl:for-each select="//Product">
          <xsl:sort select="Artikelnummer"/>
          <tr>
             <td><xsl:value-of select="Artikelnummer"/></td>
                 <td><xsl:value-of select="Hersteller"/></td>
             <td><xsl:value-of select="Artikelgruppe"/></td>
         </tr>
          </xsl:for-each>
        </table>
      </body>
      </html>
    </xsl:template>
    </xsl:stylesheet>
    Soweit so gut alles funktioniert einwandfrei. Aber nun möchte ich noch die einzelnen Variationen mit einbinden. Sprich das neben der Tabellenspalte Artikelnummer eine Spalte mit Produktnummer kommt und das diese dann zu den Artikelnummer auch passt, also das die Variationen auch zur dazugehörigen Artikelnummer stehen.
    Folgendes habe ich versucht:

    HTML Code:
    <xsl:for-each select="//Product"> auf <xsl:for-each select="//Variante"> umgeschrieben
    Die XSL-Datei verändert und zwarso das eine neue Zeile Spalte gebildet wird und dort eine extra referenzierung auf die Variazion. In beiden Fällen aber sehe ich nur noch die Produktnummer und der Rest ist weg.

    Ich weiß nicht ob Rowspan geht, aber wie gesagt es müsste dynamisch sein, da es mehrere 100 Artikelnummern mit jeweils bis zu 60 Produktnummern, was aber auch ständig variiert.

    Habt ihr eine Idee?


    sonnige Grüße,

    Kalito

  • #2
    Mit XSLT 1.0 ist das ein Fall für Muechian grouping http://www.jenitennison.com/xslt/grouping/index.xml
    Code:
    <xsl:key name="k1" match="Product" use="Artikelnummer"/>
    
    <xsl:template match="/">
      ...
    
      <table>
        <thead>
           <tr>
             <th>...</th>
             <th>...</th>
             <th>...</th>
             <th>...</th>
           </tr>
         </thead>
         <tbody>
            <xsl:for-each select="//Product[generate-id() = generate-id(key('k1', Artikelnummer)[1])]">
               <xsl:sort select="Artikelnummer"/>
               <tr>
                  <td>...</td>
                  <td>...</td>
                  <td>...</td>
                  <td>
                     <xsl:for-each select="key('k1', Artikelnummer)/Variante/Produktnummer">
                        <xsl:sort select="."/>
                        <xsl:value-of select="."/>
                        <xsl:if test="position() != last()"><xsl:text>, </xsl:text>
                     </xsl:for-each>
                  </td>
                </tr>
            </xsl:for-each>
         </tbody>
      </table>
    
      ...
    </xsl:template>

    Comment

    Working...
    X