XSLT UDT,限制排序后每组的输出数量

时间:2017-09-21 10:57:39

标签: xslt

我设法根据他们的类别对我的项目进行排序,但现在我想限制每个类别显示的项目数量。这是我到目前为止所得到的:

 <xsl:for-each select="udt:Data[count(. | key('data-by-Cat', udt:Cat)[1]) = 1]">
    <xsl:sort select="udt:Zap" />
    <div class="wrapper">
        <h3>
          <xsl:value-of select="udt:Cat" disable-output-escaping="yes" />
        </h3>
      <xsl:variable name="currentData" select="key('data-by-Cat', udt:Cat)" />
      <xsl:if test="$currentData">
        <div class="my-item-container">
          <xsl:apply-templates select="$currentData" mode="list">
          </xsl:apply-templates>
        </div>
      </xsl:if>
    </div>
</xsl:for-each>

这是我的XML示例:

<UserDefinedTable>
    <Data>
        <UserDefinedRowId>4057</UserDefinedRowId>
        <Title>Item title 1</Title>
        <Cat>Category 1</Cat>
        <Link>google.com</Link>
    </Data> 
</UserDefinedTable>

2 个答案:

答案 0 :(得分:0)

尝试在xsl:sort标记下添加此行:

<xsl:if test="not(position() > 10)">

这只会显示10个项目。

你可以在没有()的情况下做到:

<xsl:if test="position() < 3">

如果您对'<' '>'符号有疑问,请使用&lt;&gt;

答案 1 :(得分:0)

我认为你需要做的就是......

<xsl:variable name="currentData" select="key('data-by-Cat', udt:Cat)[position() &lt;= 10]" />

或者,如果您希望在没有限制的情况下在其他地方使用$currentData,您可以将条件放在xsl:apply-templates而不是

<xsl:apply-templates select="$currentData[position() &lt;= 10]" mode="list">