这是一个跟进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="*" />
期望的结果:
实际结果:
答案 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>