Har problem med en loop. Jag vill loopa så många gånger som det står i for-each-instruktionen itererar över en nodmängd (node-set), d.v.s. uttrycket i select-attributet måste evalueras till en nodmängd. I ditt fall så får den en mängd innehållande en nod: nummer-elementet. problem med att loopa i xslt
<xsl:variable name="antal" select="antal" />
Har provat med:
<code>
<xsl:variable name="antal" select="nummer" />
<xsl:for-each select="$antal">
<xsl:element name="img">
<xsl:attribute name="src">
<xsl:value-of select="url"/>
</xsl:attribute>
</xsl:element>
</xsl:for-each>
</code>
Men loopar bara ut en gång. Hur ska jag lösa detta så den loopar så många gånger som det står mellan taggarna <nummer> i xml-filen?
Tacksam för all hjälpSv: problem med att loopa i xslt
Du måste antingen skapa en nodmängd med samma antal noder som du vill ha iterationer och låta for-each iterera över denna, eller simulera en for-loop med hjälp av rekursiva mallar (templates).
Exempel på en rekursiv mall (med reservation för ev. småfel.):
<xsl:template name="create-image">
<xsl:param name="count"/>
<xsl:param name="url"/>
<xsl:if test="$count > 0">
<img src="{$url}"/>
<xsl:call-template name="create-image">
<xsl:with-param name="count" select="$count - 1"/>
<xsl:with-param name="$url"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
Den här mallen använder 'tail-recursion', d.v.s. det rekursiva anropet sker sist i mallen och kan lätt göras om av XSLT-processorn till en iterering.