xslt - XSLT中的条件位置检查

标签 xslt xpath position conditional

我有一个呈现文章的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/

相关文章:

html - 在底部放置两个 div block

xslt - 将模板应用于变量/序列中的元素

xml - XSLT 样式表的 IDE

java - 如何编写代码来比较selenium中的下拉选项

c# - 获取特定的xelement子值

indexing - 获取内容对象在父级中的位置的最佳方法是什么? Plone 人4号

xml - 如何在 ubuntu 14.04 中使用 Apache spark 解决以下 fatal error ?

XML/XSL 用 <br/> 替换空格

ios - 在 Objective-C 中解析 HTML

rotation - UICollectionView 修复旋转后的分页位置