【发布时间】:2011-09-29 12:37:17
【问题描述】:
我有一个呈现文章的 XSLT 文件。我将一个变量传递到 XSLT 文件中,该文件应该限制输出的记录数。问题是,这个“限制”变量是可选的——如果它不存在,XSLT 文件需要输出所有值;如果 'limit' 变量是一个数字,那么它只需要输出该数量的项目(可能使用 position() 测试)。
这是我的代码:
<xsl:variable name="limit" select="/macro/limit"/>
<xsl:template match="/">
<xsl:variable name="allNodes" select="$localSiteRoot/descendant-or-self::*[articles != '']"/>
<xsl:for-each select="$allNodes">
<div class="articleItem">
<h3><xsl:value-of select="./articleHeader"/></h3>
<xsl:if test="./articleSubheader != ''">
<h4><xsl:value-of select="./articleSubheader"/></h4>
</xsl:if>
</div>
</xsl:for-each>
</xsl:template>
显然我可以围绕这个做一个 XSLT 选择然后说
<xsl:choose>
<xsl:when select="$limit!= ''">
<xsl:if test="position() < $limit">
但是我需要重复两次代码。肯定有更好的方法,也许使用模板,但我就是不知道它是如何工作的,而且我的 XSLT 也不是很好。
谁能用最好/最简洁的方法为我指明正确的方向?
谢谢!
【问题讨论】:
标签: xslt xpath position conditional