【问题标题】:XSL loop from 1 to variable从 1 到变量的 XSL 循环
【发布时间】:2014-12-17 17:20:45
【问题描述】:

XML:

<paginering>
 <pagineringButtons>
  <field name="pagineringButtonExcel" type="button"></field>
  <field name="pagineringButtonPrint" type="button"></field>
 </pagineringButtons>
 <field name="pagineringPaginas" type="text"></field>
 <field name="pagineringSelect" type="selectChosen">
 <fieldOption id="10"><![CDATA[10]]></fieldOption>
 <fieldOption id="100"><![CDATA[100]]></fieldOption>
 <fieldOption id="20"><![CDATA[20]]></fieldOption>
 <fieldOption id="50"><![CDATA[50]]></fieldOption>
 <init id=""> </init></field>
</paginering>

XSL:

<ul class="paginering">
 <li><a href="javascript:void(0)">Vorige</a></li>
 <xsl:variable name="aantalRijen">
  <xsl:value-of select="count(//row[@type='data'])" />
 </xsl:variable>
 <xsl:variable name="aantalPaginas">
  <xsl:value-of select="ceiling($aantalRijen div 10)" />
 </xsl:variable>
 <li><xsl:value-of select="ceiling($aantalRijen div 10)" /></li>
  <xsl:if test="not($num = $aantalPaginas)">
   <xsl:call-template name="writePagenumbers">
    <xsl:with-param name="num" select="$num + 1" />
   </xsl:call-template>
  </xsl:if>
 <li><a href="javascript:void(0)">Volgende</a></li>
</ul>

<xsl:template name="writePagenumbers">
 <xsl:param name="num" />
 <li><xsl:value-of select="num"/></li>
</xsl:template>

'aantalPaginas' 的值等于 18。

想要的 HTML:

<ul class="paginering">
 <li><a href="javascript:void(0)">Vorige</a></li>
 <li>1</li>
 <li>2</li>
 <li>3</li>
 <li>4</li>
 <li>5</li>
 <li>6</li>
 <li>7</li>
 <li>8</li>
 <li>9</li>
 <li>10</li>
 <li>11</li>
 <li>12</li>
 <li>13</li>
 <li>14</li>
 <li>15</li>
 <li>16</li>
 <li>17</li>
 <li>18</li>
 <li><a href="javascript:void(0)">Volgende</a></li>
</ul>

如何制作一个从 1 到 18 的良好循环?我现在得到的结果是 1 'li' 的内部值为 '18',而 1 'li' 没有内部值。我怎样才能做到这一点?

编辑: &lt;li&gt;18&lt;/li&gt; 来自想要的循环。我只需要把&lt;li&gt;&lt;/li&gt; 改成正确的。

【问题讨论】:

    标签: xml loops xslt


    【解决方案1】:

    假设num变量初始设置为18,您可以对writePagenumbers模板执行递归调用

    <xsl:template name="writePagenumbers">
       <xsl:param name="num" />
       <xsl:param name="current" select="1" />
       <li><xsl:value-of select="$current"/></li>
       <xsl:if test="$current &lt; $num">
          <xsl:call-template name="writePagenumbers">
              <xsl:with-param name="num" select="$num" />
              <xsl:with-param name="current" select="$current+ 1" />
          </xsl:call-template>
       </xsl:if>
    </xsl:template>
    

    如果你使用的是 XSLT 2.0,你可以这样写

    <xsl:template name="writePagenumbers">
       <xsl:param name="num" />
       <xsl:for-each select="1 to $num">
           <pre><xsl:value-of select="."/></pre>
      </xsl:for-each>
    </xsl:template>
    

    【讨论】:

    • 我很抱歉。我已经更正了我的答案。调用模板时将参数num 设置为18(或任何值),它是从1 到18 的current 变量。
    • 只需将&lt;xsl:value-of select="num"/&gt; 更改为&lt;xsl:value-of select="$current"/&gt;,现在效果很好,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多