Polarbear: HTML in XSL, Verschachtelte Templates

Beitrag lesen

Hallo Gemeinde,

der Inhalt des folgenden XML

<?xml version="1.0" encoding="utf-8" ?>
<docs>
 <row title="Titel a" teaser="Teaser AAAAA" imgsrc="a.gif" />
 <row title="Titel b" teaser="Teaser CCCCC" imgsrc="b.gif" />
 <row title="Titel c" teaser="Teaser BBBBB" imgsrc="c.gif" />
</docs>

soll via XSLT so ausgegeben werden:

<html><body>
 <table border="1">
   <tr><td colspan="2"><b>Titel a</b></td></tr>
   <tr>
   <td valign="top"><img src="a.gif"></td>
   <td>
    Teaser AAAAA<br><br>
    Titel b<br>
    Titel c
   </td>
  </tr>
 <table>
</body></html>

Dabei handelt es sich um drei Artikel, von denen der erste vollständig angeteasert wird und auf die restlichen Artikel nur mittels des Titels verwiesen wird.

Problem: Im XSLT gibt es eine Verschachtelung von Element mit position() = 1 (Vollständig angeteasert) und den folgenden Elementen für die position() > 1 gilt:

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="html" />

<xsl:template match="//docs">
  <div style="border:1px solid red">
   <xsl:apply-templates select="row"/>
  </div>
 </xsl:template>

<xsl:template match="docs/row[position() = 1]">
  <table border="1">
    <tr><td colspan="2"><b><xsl:value-of select="@title"/></b></td></tr>
    <tr>
    <td valign="top"><img src="{@imgsrc}"/></td>
    <td>
     <xsl:value-of select="@teaser"/><br/><br/>
     <xsl:apply-templates select="row"/> <!-- ??????  -->
    </td>
   </tr>
  </table>
 </xsl:template>

<xsl:template match="docs/row[position() > 1]">
  <xsl:value-of select="@title"/><br/>
 </xsl:template>

</xsl:stylesheet>

Wie kann das unterste template in das andere unter den genannten Bedingungen eingefügt werden? Gerne auch ganz andere Ansätze !

Dank und Gruss
Polarbear