xslt:匹配筛选和排序结果集的位置

时间:2011-02-24 14:44:05

标签: xml xslt umbraco

这是一个跟进to this post。基本上我需要在过滤的和已排序的集合中获取position()个项目。关于如何处理此事的任何建议?

谢谢!

XML:

<?xml version="1.0" encoding="utf-8"?>
<news>
    <newsItem id="1">
        <title>Title 1</title>
    </newsItem>
    <newsItem id="2">
        <title>Title 2</title>
    </newsItem>
    <newsItem id="3">
        <title></title>
    </newsItem>
    <newsItem id="4">
        <title></title>
    </newsItem>
    <newsItem id="5">
        <title>Title 5</title>
    </newsItem>
</news>

XSL:

    

<xsl:template match="/">
    <ol>
        <xsl:apply-templates select="/news/newsItem [string(title)][3 > position()]">
            <xsl:sort order="descending" data-type="number" select="@id"/>
        </xsl:apply-templates>
    </ol>
</xsl:template>

<xsl:template match="newsItem">
    <li>
        <xsl:value-of select="title"/>
    </li>
</xsl:template>

<xsl:template match="*" />

期望的结果:

  1. Title 5
  2. Title 2
  3. 实际结果:

    1. Title 2
    2. Title 1

1 个答案:

答案 0 :(得分:4)

您应该查看我的answer关于上下文节点列表。

此样式表:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <ol>
            <xsl:apply-templates select="/news/newsItem [string(title)]">
                <xsl:sort order="descending" data-type="number" select="@id"/>
            </xsl:apply-templates>
        </ol>
    </xsl:template>
    <xsl:template match="newsItem">
        <xsl:if test="3 > position()">
            <li>
                <xsl:value-of select="title"/>
            </li>
        </xsl:if>
    </xsl:template>
</xsl:stylesheet>

输出:

<ol>
    <li>Title 5</li>
    <li>Title 2</li>
</ol>