Thomas Meinike: lösungsstrategie

Beitrag lesen

Hallo,

... es gibt ja soweit ich weiß keine möglichkeit eine schleife in xsl zu machen oder doch? (schleife aufgrund einer variablen, nicht von knoten oder vergleichbarem) ... somit stellt sich für mich die frage wie machen?

Man kann Templates mit xsl:call-template rekursiv aufrufen. Ich habe mal einen kleinen Testcase erstellt.

hotels.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet type="text/xsl" href="hotels.xsl"?>
<!-- Test by TM 07/03 -->

<wurzel>

<hotel sterne="1"><bla>...</bla></hotel>
  <hotel sterne="2"><bla>...</bla></hotel>
  <hotel sterne="3"><bla>...</bla></hotel>
  <hotel sterne="4"><bla>...</bla></hotel>
  <hotel sterne="5"><bla>...</bla></hotel>

</wurzel>

hotels.xsl

<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- Test by TM 07/03 -->

<xsl:output
    method="html"
    doctype-public="-//W3C//DTD HTML 4.01 Transitional//EN"
    doctype-system="http://www.w3.org/TR/html401/loose.dtd"
    encoding="ISO-8859-1"
    version="4.01"
    indent="yes"
/>

<xsl:template match="/">

<html>
<head><title>Test</title></head>
<body>

<xsl:for-each select="wurzel/hotel">

Hotel <xsl:value-of select="position()" />&#160;

<xsl:call-template name="bilder">
      <xsl:with-param name="to" select="@sterne" />
      <xsl:with-param name="step" select="1" />
      <xsl:with-param name="from" select="1" />
    </xsl:call-template>

<br />

</xsl:for-each>

</body>
</html>

</xsl:template>

<xsl:template name="bilder">

<xsl:param name="from" />
  <xsl:param name="to" />
  <xsl:param name="step" />

<xsl:if test="$from <= $to">

<img src="stern.gif" alt="" />

<xsl:call-template name="bilder">
      <xsl:with-param name="from" select="$from+$step" />
      <xsl:with-param name="to" select="$to" />
      <xsl:with-param name="step" select="$step" />
    </xsl:call-template>

</xsl:if>

</xsl:template>
</xsl:stylesheet>

Wenn stern.gif vorhanden ist, sollte die Ausgabe funktionieren. Ich hoffe mal, dass es dem Gesuchten nahekommt.

MfG, Thomas