Thomas J.S.: Schleife von 1 bis 31

Beitrag lesen

Hallo,

ich arbeite gerade an einem Datenbankverwaltungstool in PHP5 mit XML/XSLT. Soll heissen: will man einen Tabelleneintrag bearbeiten, so holt PHP den Eintrag aus der Datenbank, macht ein XML-Dokument daraus und jagt dieses durch einen XSLT-Prozessor, um das XHTML zu erzeugen, welches letztlich das Eingabeformular für den User darstellt.

Probleme machen mir nun vorselektierte Auswahllisten: Beispielsweise  sowas hier soll mittels XSLT automatisch erzeugt werden:

<select name="_xy_month">
  <option>1</option>
  <option>2</option>
  ...
  <option selected="selected">12</option>
  ...
  <option>30</option>
  <option>31</option>
</select>

Dafür benötige ich eine Schleife, wie man sie aus der imperativen Programmierung kennt:
  for (i=1; i<32; i++) { ... }

Geht sowas auch in XSLT? Also entweder eine Variable hochzählen oder aber eine XPATH-Funktion, die ein Interval oder eine Menge ausgibt, so dass eine Code wie dieser resultieren würde:
  <xsl:for-each select="Interval(1,31)/*" >

Hä??? Wie biette?
Was ist jetzt "Interval"? Und was sollen nun "1" bzw. "31" denn darstellen? Ich kann deine Fragestellung damit nicht nachvollziehen.

<option><xsl:for-each select="."></option>

Das wäre so oder so falsch.
Und dafür was du laut deiner Fragestellung möchtest, zumindest so verstehe ich das, brauchst du keine besondere "Schleifen":

<xsl:template match="select">
 <select>
  <xsl:for-each select="option">
  <option>
   <xsl:if test="@selected">
    <xsl:attribute name="selected">selected</xsl:attribute>
   </xsl:if>
   <xsl:value-of select="." />
  <option>
 </xsl:for-each>
 </select>
</xsl:template>

Grüße
Thomas

--
Surftip: kennen Sie schon Pipolino's Clowntheater?
http://www.clowntheater-pipolino.net/