gpt4 book ai didi

xslt - XSLT中的条件位置检查

转载 作者:行者123 更新时间:2023-12-03 16:21:57 24 4
gpt4 key购买 nike

我有一个呈现文章的XSLT文件。我正在将变量传递到XSLT文件中,该文件应该限制记录输出的数量。麻烦的是,这个'limit'变量是可选的-如果不存在,则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() &lt; $limit">


但是然后我需要重复两次代码。必须有一个更好的方法,也许使用模板,但是我无法弄清楚它如何工作,而我的XSLT也不是很好。

谁能以最佳/最正确的方式指出正确的方向?

谢谢!

最佳答案

只需使用:

<xsl:for-each select="$allNodes[not(position() > $limit)]"> 


说明:


如果 $limit的值可强制转换为数字,则上述 select属性中的表达式选择的节点不超过 $limit个。
如果 $limits的值不能转换为数字(例如空或'abc'),则将其转换为NaN。根据定义,涉及NaN的比较始终为 false(),因此谓词 not(position() > $limittrue(),在这种情况下,选择 $allNodes中的所有节点。

关于xslt - XSLT中的条件位置检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7597424/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com