我知道有相似的帖子,但我很难找到解决方案。我有这样的XML数据:
<item>
<title> A Title </title>
<link>www.alink.com</link>
<comments>www.alink.com/cp,,emts</comments>
<pubDate>Fri, 19 Apr 2013 20:28:39 +0000</pubDate>
<dc:creator>aUser</dc:creator>
<category><![CDATA[News]]></category>
<description><![CDATA["A description"]]></description>
<content:encoded><![CDATA[content of post]]></content:encoded>
<wfw:commentRss>www.alink</wfw:commentRss>
<slash:comments>0</slash:comments>
</item>
我的目标是输出一个div
,其标题带有链接值,然后输出pubDate
,没有时间。这很简单,只需使用它:
<xsl:template match="item">
<div>
<h5><a href="{link}"><xsl:value-of select="title" /></a> </h5>
<p><xsl:value-of select="substring(pubDate,1,16)"/></p>
</div>
</xsl:template>
问题是我很想改变日期的格式,我不能从XML的源代码中做到这一点。我希望格式只是月,日和年,因此Fri, 19 Apr 2013
将变为:April 19, 2013
。任何建议都会非常有用。
我正在使用XSLT 2.0
答案 0 :(得分:0)
以下是xslt版本1.0和exsl扩展名的解决方案。 如果没有exsl扩展且仍然使用版本1.0,则可以使用xsl:when来完成从短月到长月名称的转换。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:exsl="http://exslt.org/common"
extension-element-prefixes="exsl">
<xsl:output method="xml" indent="yes"/>
<xsl:variable name="month_data_tmp">
<month short="Apr" long="April" />
<!--- and so on for each month -->
</xsl:variable>
<xsl:variable name="month_data" select="exsl:node-set($month_data_tmp)" />
<xsl:template match="date" >
--
<xsl:call-template name="formate_date" >
<xsl:with-param name="date" select="pubDate" />
</xsl:call-template>
</xsl:template>
<xsl:template name="formate_date">
<xsl:param name="date" />
<xsl:variable name ="day_str" select="substring-before($date, ',')" />
<xsl:variable name ="after_day_str" select="substring-after($date, ' ')" />
<xsl:variable name ="day_nr" select="substring-before($after_day_str, ' ')" />
<xsl:variable name ="after_day_nr" select="substring-after($after_day_str, ' ')" />
<xsl:variable name ="month" select="substring-before($after_day_nr, ' ')" />
<xsl:variable name ="after_month" select="substring-after($after_day_nr, ' ')" />
<xsl:variable name ="year" select="substring-before($after_month, ' ')" />
<xsl:value-of select="$month_data/month[@short=$month]/@long"/>
<xsl:text> </xsl:text>
<xsl:value-of select="$day_nr"/>
<xsl:text>, </xsl:text>
<xsl:value-of select="$year"/>
</xsl:template>
</xsl:stylesheet>
生成输出:
April 19, 2013
答案 1 :(得分:-1)
使用'2.0',我们可以使用format-date函数。要了解更多信息,请点击此链接http://my.safaribooksonline.com/book/xml/9780596527211/creating-output/xslt-id-4.5