xml - 可以在 xsl 中将日期转换为星期几月份 dd 吗?

标签 xml date xslt

我正在使用 xsl 样式表从网站上的 xml 文件中提取并显示选定的数据。

数据元素之一是格式为yyyy-mm-dd的日期。例如,我想将其显示为“星期三”。 5 月 10 日。这可能吗?

我的整个项目是获取一个 xml 文件,提取 3 个数据元素,并将它们按排序顺序排列出来,并修改日期显示。我有一个用于此转换的 js,但没有排序。似乎 xsl 是排序问题的答案,但现在我不知道如何(或者是否可以)“拦截”日期并对它应用 js 转换并将其放在语句中: xsl :value-of select="开始时间/日期"

最佳答案

XSLT 具有很强的基本算术能力,可以使用 Zeller's formula 导出星期几。 .

您需要使用自己的代码调用模板

<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 &lt; 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 &lt; 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>

关于xml - 可以在 xsl 中将日期转换为星期几月份 dd 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16739141/

相关文章:

xml - Lua - 从 URL 解析 XML

javascript - 当天数增加时增加下个月的 Javascript 日期对象?

java - 从星期一开始日历

Android - API 级别 21 中的日期

xslt - XPath:无法从选定的标签中获取正确的值

xslt - 在XSLT中增加值

c# - 如何将位掩码值转换为选项对象?

.net - asp.net应用程序的多用户XML文档 “database”

java - 严重 : Error configuring application listener of class org. apache.struts2.tiles.StrutsTilesListener java.lang.NoClassDefFoundError:

xslt - 如何在 XPath 中表达同时包含撇号和引号的字符串?