ritschmanhard: XSL für Dummies

Beitrag lesen

Hallo Roli!

Zunächst ein paar kurze Anmerkungen:
Klar ist wohl, dass die XML Struktur nicht optimal ist;
Gedanklich ist Preis ja wohl ein Attribut des Produkts, also:
<produkt id="1" preis="200" name="super">
alternativ:
<produkt id="1">
  <preis>200</preis>
  <name>super</name>
</produkt>
sind sehr viel logischer...

Aber wahrscheinlich handelt es sich hier um eine Datenbank-Exzerpt,
"und dann ist halt die Relation der ID Knoten...".
Na gut - aber ich setze wenigstens voraus, dass der myid Konten der erste in der Liste ist und alle anderen attributknoten folgen.

Die Lösung sieht so aus:

<?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>
 <head>
 </head>
 <body>
  <table border="1">
  <xsl:for-each select="//produkt/myid">
   <xsl:call-template name="Schleife">
    <xsl:with-param name="Ident" select="." />
   </xsl:call-template>
  </xsl:for-each>
  </table>
 </body>
</html>
</xsl:template>

<xsl:template name="Schleife">
<xsl:param name="Ident" />
 <tr>
  <td>ident: <xsl:value-of select="$Ident"/></td>
  <xsl:for-each select="//*/myid">
   xsl:choose
    <xsl:when test="$Ident = ./.">
     <xsl:for-each select="./following-sibling::*">
      <td>
       <xsl:value-of select="./."/>
      </td>
     </xsl:for-each>
    </xsl:when>
   </xsl:choose>
  </xsl:for-each>
 </tr>
</xsl:template>

</xsl:stylesheet>

Hilfreich sind hierbei http://www.zvon.org/xxl/XPathTutorial/Output/example17.html und alle anderen Knotenbeschreiber sowie http://de.selfhtml.org/xml/darstellung/xsltelemente.htm#with_param

Viele Grüsse,
Richard