我正在创建一个网站,我需要在RSS源中显示前5条记录,这些记录需要按日期和时间排序。
RSS Feed中的日期字段采用以下格式: “周一,2009年2月16日16:02:44 GMT”
我在使记录正确排序方面遇到了很大的问题 - 我已经尝试过很多我见过的不同代码示例,但似乎没有人正确地对记录进行排序。我的XSL表的代码如下所示,相关的feed是 here
非常感谢任何人的帮助!!!
谢谢,
克里斯。
XSL代码:
<xsl:stylesheet version="1.1"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:digg="http://digg.com//docs/diggrss/"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<xsl:template match="/">
<xsl:for-each select="//*[local-name()='item'][position() < 6]">
<p>
<a>
<xsl:attribute name="href">
<xsl:value-of select="*[local-name()='link']"/></xsl:attribute>
<xsl:attribute name="target">
<xsl:text>top</xsl:text>
</xsl:attribute>
<xsl:value-of select="*[local-name()='title']"/>
</a>
<br/>
<span class="smaller"><xsl:value-of select="*[local-name()='pubDate']" disable-output-escaping="yes"/></span>
</p>
</xsl:for-each>
答案 0 :(得分:8)
以下转型:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:variable name="vrtfMonths">
<m name="Jan" num="01"/>
<m name="Feb" num="02"/>
<m name="Mar" num="03"/>
<m name="Apr" num="04"/>
<m name="May" num="05"/>
<m name="Jun" num="06"/>
<m name="Jul" num="07"/>
<m name="Aug" num="08"/>
<m name="Sep" num="09"/>
<m name="Oct" num="10"/>
<m name="Nov" num="11"/>
<m name="Dec" num="12"/>
</xsl:variable>
<xsl:variable name="vMonths" select=
"document('')/*/xsl:variable
[@name='vrtfMonths']/*"
/>
<xsl:template match="channel">
<xsl:for-each select="item">
<xsl:sort data-type="number" order="descending" select=
"concat(substring(pubDate,13,4),
$vMonths[@name
=
substring(current()/pubDate,9,3)]/@num,
substring(pubDate,6,2),
translate(substring(pubDate,18,8),
':',
''
)
)
"/>
<xsl:if test="not(position() > 5)">
<xsl:copy-of select="."/>
</xsl:if>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
应用于提供的源XML文档(此处列出的时间太长,请参阅link),
产生想要的结果:
<item xmlns:media="http://search.yahoo.com/mrss">
<title>Inflation rate expected to fall</title>
<description>The latest figures for the rate of inflation, for the 12 months to January, are expected to show that it has fallen again.</description>
<link>http://news.bbc.co.uk/go/rss/-/1/hi/business/7893873.stm</link>
<guid isPermaLink="false">http://news.bbc.co.uk/1/hi/business/7893873.stm</guid>
<pubDate>Tue, 17 Feb 2009 02:58:03 GMT</pubDate>
<category>Business</category>
<media:thumbnail width="66" height="49" url="http://newsimg.bbc.co.uk/media/images/45483000/jpg/_45483998_cash226.jpg" />
</item><item xmlns:media="http://search.yahoo.com/mrss">
<title>Farming pressures</title>
<description>Are farmers being forced to use GM seeds?</description>
<link>http://news.bbc.co.uk/go/rss/-/1/hi/business/7892328.stm</link>
<guid isPermaLink="false">http://news.bbc.co.uk/1/hi/business/7892328.stm</guid>
<pubDate>Tue, 17 Feb 2009 00:06:31 GMT</pubDate>
<category>Business</category>
<media:thumbnail width="66" height="49" url="http://newsimg.bbc.co.uk/media/images/45481000/jpg/_45481936_005666785-1.jpg" />
</item><item xmlns:media="http://search.yahoo.com/mrss">
<title>Engine room?</title>
<description>Western Australia's economy may be hitting reverse. </description>
<link>http://news.bbc.co.uk/go/rss/-/1/hi/business/7840370.stm</link>
<guid isPermaLink="false">http://news.bbc.co.uk/1/hi/business/7840370.stm</guid>
<pubDate>Tue, 17 Feb 2009 00:05:25 GMT</pubDate>
<category>Business</category>
</item><item xmlns:media="http://search.yahoo.com/mrss">
<title>Coining it in? </title>
<description>Investors turning to old and rare coins in the downturn </description>
<link>http://news.bbc.co.uk/go/rss/-/1/hi/business/7878606.stm</link>
<guid isPermaLink="false">http://news.bbc.co.uk/1/hi/business/7878606.stm</guid>
<pubDate>Tue, 17 Feb 2009 00:04:29 GMT</pubDate>
<category>Business</category>
<media:thumbnail width="66" height="49" url="http://newsimg.bbc.co.uk/media/images/45459000/jpg/_45459789_dsc_4982.jpg" />
</item><item xmlns:media="http://search.yahoo.com/mrss">
<title>Home sales may rise say surveyors</title>
<description>Property sales may pick in the next few months, according to the Royal Institution of Chartered Surveyors (Rics).</description>
<link>http://news.bbc.co.uk/go/rss/-/1/hi/business/7893193.stm</link>
<guid isPermaLink="false">http://news.bbc.co.uk/1/hi/business/7893193.stm</guid>
<pubDate>Tue, 17 Feb 2009 00:02:19 GMT</pubDate>
<category>Business</category>
<media:thumbnail width="66" height="49" url="http://newsimg.bbc.co.uk/media/images/45483000/jpg/_45483075_006771638-1.jpg" />
</item>
答案 1 :(得分:0)
解决文档限制的另一种方法是使用以下内容:
<xsl:template name="getMonth">
<xsl:param name="name" />
<xsl:choose>
<xsl:when test="$name = 'Jan'">01</xsl:when>
<xsl:when test="$name = 'Feb'">02</xsl:when>
<xsl:when test="$name = 'Mar'">03</xsl:when>
<xsl:when test="$name = 'Apr'">04</xsl:when>
<xsl:when test="$name = 'May'">05</xsl:when>
<xsl:when test="$name = 'Jun'">06</xsl:when>
<xsl:when test="$name = 'Jul'">07</xsl:when>
<xsl:when test="$name = 'Aug'">08</xsl:when>
<xsl:when test="$name = 'Sep'">09</xsl:when>
<xsl:when test="$name = 'Oct'">10</xsl:when>
<xsl:when test="$name = 'Nov'">11</xsl:when>
<xsl:when test="$name = 'Dec'">12</xsl:when>
<xsl:otherwise>99</xsl:otherwise>
</xsl:choose>
</xsl:template>
使用
调用 <xsl:call-template name="getMonth">
<xsl:with-param name="name" select="substring(./pubDate,9,3)" />
</xsl:call-template>
它不漂亮,但至少你不必担心安全性