XSLT 具有相当的基本算术能力,可以使用Zeller 公式推导出星期几。
您需要使用您自己的代码调用模板
<xsl:call-template name="date-format">
<xsl:with-param name="yyyy-mm-dd" select="StartTime/Date"/>
</xsl:call-template>
这个样式表
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:strip-space elements="*"/>
<xsl:output indent="yes"/>
<xsl:template match="node()">
<xsl:copy>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="date">
<xsl:copy>
<xsl:call-template name="date-format">
<xsl:with-param name="yyyy-mm-dd" select="."/>
</xsl:call-template>
</xsl:copy>
</xsl:template>
<xsl:template name="date-format">
<xsl:param name="yyyy-mm-dd"/>
<xsl:variable name="yyyy" select="substring-before($yyyy-mm-dd, '-')"/>
<xsl:variable name="mm-dd" select="substring-after($yyyy-mm-dd, '-')"/>
<xsl:variable name="mm" select="substring-before($mm-dd, '-')"/>
<xsl:variable name="dd" select="substring-after($mm-dd, '-')"/>
<xsl:variable name="Y">
<xsl:choose>
<xsl:when test="$mm < 3"><xsl:value-of select="$yyyy - 1"/></xsl:when>
<xsl:otherwise><xsl:value-of select="$yyyy + 0"/></xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="y" select="$Y mod 100"/>
<xsl:variable name="c" select="floor($Y div 100)"/>
<xsl:variable name="d" select="$dd+0"/>
<xsl:variable name="m">
<xsl:choose>
<xsl:when test="$mm < 3"><xsl:value-of select="$mm + 12"/></xsl:when>
<xsl:otherwise><xsl:value-of select="$mm + 0"/></xsl:otherwise>
</xsl:choose>
</xsl:variable>
<xsl:variable name="w" select="($d + floor(($m + 1) * 2.6) + $y + floor($y div 4) + floor($c div 4) - $c * 2 - 1) mod 7"/>
<xsl:variable name="www">
<xsl:choose>
<xsl:when test="$w = 0">Sun</xsl:when>
<xsl:when test="$w = 1">Mon</xsl:when>
<xsl:when test="$w = 2">Tue</xsl:when>
<xsl:when test="$w = 3">Wed</xsl:when>
<xsl:when test="$w = 4">Thu</xsl:when>
<xsl:when test="$w = 5">Fri</xsl:when>
<xsl:when test="$w = 6">Sat</xsl:when>
</xsl:choose>
</xsl:variable>
<xsl:variable name="mmm">
<xsl:choose>
<xsl:when test="$mm = 1">Jan</xsl:when>
<xsl:when test="$mm = 2">Feb</xsl:when>
<xsl:when test="$mm = 3">Mar</xsl:when>
<xsl:when test="$mm = 4">Apr</xsl:when>
<xsl:when test="$mm = 5">May</xsl:when>
<xsl:when test="$mm = 6">Jun</xsl:when>
<xsl:when test="$mm = 7">Jul</xsl:when>
<xsl:when test="$mm = 8">Aug</xsl:when>
<xsl:when test="$mm = 9">Sep</xsl:when>
<xsl:when test="$mm = 10">Oct</xsl:when>
<xsl:when test="$mm = 11">Nov</xsl:when>
<xsl:when test="$mm = 12">Dec</xsl:when>
</xsl:choose>
</xsl:variable>
<xsl:value-of select="concat($www, '. ', $mmm, ' ', $d)"/>
</xsl:template>
</xsl:stylesheet>
应用于此 XML 数据
<?xml version="1.0" encoding="UTF-8"?>
<document>
<date>2013-01-01</date>
<date>2013-05-24</date>
<date>2013-12-25</date>
<date>1957-07-13</date>
<date>1776-07-04</date>
</document>
根据需要生成此输出
<?xml version="1.0" encoding="utf-8"?>
<document>
<date>Tue. Jan 1</date>
<date>Fri. May 24</date>
<date>Wed. Dec 25</date>
<date>Sat. Jul 13</date>
<date>Thu. Jul 4</date>
</document>