Javascript 使用xsl设置XML日期格式

Javascript 使用xsl设置XML日期格式,javascript,xml,xslt,Javascript,Xml,Xslt,我有一个XML文档。我从XML中获取这个“2011-08-01”格式的日期。 我必须使用Java脚本或XSL以“2011年8月8日”格式显示相同的日期。 XML标记如下所示: 2011-08-01 请帮我做这件事。XSLT1.0不是一种很好的日期格式化技术。您可以通过字符串处理手动执行此操作,也可以通过某些特定于XSLT解析器的扩展,例如microsoft函数。但是,XSLT2.0的标准格式是日期 我建议改用JavaScript。见这一相关问题: 看看这些链接: ,及 I.XSLT 2.0解决

我有一个XML文档。我从XML中获取这个“2011-08-01”格式的日期。 我必须使用Java脚本或XSL以“2011年8月8日”格式显示相同的日期。 XML标记如下所示:
2011-08-01

请帮我做这件事。

XSLT1.0不是一种很好的日期格式化技术。您可以通过字符串处理手动执行此操作,也可以通过某些特定于XSLT解析器的扩展,例如microsoft函数。但是,XSLT2.0的标准格式是日期

我建议改用JavaScript。见这一相关问题:


看看这些链接:

  • ,及

  • I.XSLT 2.0解决方案

    <xsl:stylesheet version="2.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:xs="http://www.w3.org/2001/XMLSchema">
        <xsl:output method="text"/>
    
     <xsl:template match="DatelineDate">
         <xsl:sequence select="format-date(xs:date(.), '[MNn] [D1o], [Y]')"/>
     </xsl:template>
    </xsl:stylesheet>
    
    <DatelineDate>2011-08-01</DatelineDate>
    
    August 1st, 2011
    
    August 01st, 2011
    
    注意:Saxon CE使XSLT 2.0在五种主要浏览器中可用


    II。XSLT 1.0解决方案

    <xsl:stylesheet version="2.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:xs="http://www.w3.org/2001/XMLSchema">
        <xsl:output method="text"/>
    
     <xsl:template match="DatelineDate">
         <xsl:sequence select="format-date(xs:date(.), '[MNn] [D1o], [Y]')"/>
     </xsl:template>
    </xsl:stylesheet>
    
    <DatelineDate>2011-08-01</DatelineDate>
    
    August 1st, 2011
    
    August 01st, 2011
    
    这是一个简单易懂的解决方案,它不依赖于技巧和不可读、硬编码的偏移量

    <xsl:stylesheet version="1.0"
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
     xmlns:my="my:my">
     <xsl:output method="text"/>
     <xsl:strip-space elements="*"/>
    
     <my:months>
      <m num="1">January</m>
      <m num="2">February</m>
      <m num="3">March</m>
      <m num="4">April</m>
      <m num="5">May</m>
      <m num="6">June</m>
      <m num="7">July</m>
      <m num="8">August</m>
      <m num="9">September</m>
      <m num="10">October</m>
      <m num="11">November</m>
      <m num="12">December</m>
     </my:months>
    
     <xsl:variable name="vMonthNames" select=
      "document('')/*/my:months/*"/>
    
     <xsl:template match="DatelineDate">
       <xsl:variable name="vYear"
            select="substring-before(., '-')"/>
       <xsl:variable name="vdMonth" select=
        "substring-before(substring-after(., '-'), '-')"/>
       <xsl:variable name="vdDay" select=
        "substring-after(substring-after(., '-'), '-')"/>
    
       <xsl:variable name="vMonthName" select=
         "$vMonthNames[@num = number($vdMonth)]"/>
    
       <xsl:variable name="vordDaySuffix">
        <xsl:choose>
          <xsl:when test=
           "$vdDay mod 10 = 1
           and
            not($vdDay = 11)">st</xsl:when>
          <xsl:when test="$vdDay mod 10 = 2">nd</xsl:when>
          <xsl:when test="$vdDay mod 10 = 3">rd</xsl:when>
          <xsl:otherwise>th</xsl:otherwise>
        </xsl:choose>
       </xsl:variable>
    
         <xsl:value-of select=
         "concat($vMonthName,
                 ' ',
                 $vdDay, $vordDaySuffix,
                 ', ',
                 $vYear
                 )
         "/>
     </xsl:template>
    
    </xsl:stylesheet>
    

    下面是我在XSLT1.0中有时使用的一个简单模板

    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     <xsl:output method="text"/>
    
     <xsl:variable name="months" select="'January  February March    April    May      June     July     August   SeptemberOctober  December '" />
     <xsl:variable name="dayord" select="'-stndrdthththththththththththththththththstndrdthththththththst'" />
    
     <xsl:template match="DatelineDate">
      <xsl:value-of select="normalize-space(concat(
        substring($months,substring(.,6,2) * 9 - 8, 8),
        ' ',
        substring(.,9,2) + 0,
        substring($dayord,substring(.,9,2)*2,2),
        ', ',
        substring(.,1,4)
       ))" />
     </xsl:template>
    
    </xsl:stylesheet>
    
    
    

    子字符串有点复杂,但它们基本上从两个变量中选择合适的月份名称和日期后缀。注意:这些变量的间距很重要,月份名称必须间隔9个字符。concat第三行的
    +0
    只是一个简单的技巧,将其视为一个数字,而不是文本
    01
    ;如果你真的更喜欢
    01
    格式,就不要考虑这个问题。

    ColinE:绝对语句几乎总是错误的。如果XSLT的任何版本大于1,那么以“XSLT不是一项伟大的技术…”开头的语句是不正确的。请编辑并更正。@Dimitre Novatchev-更新以澄清。但是,根据给出的问题,我仍然会选择JavaScript,以实现简单性和可移植性。科林:太好了。至于个人偏好,OP显然对XSLT解决方案感兴趣。@Dimitre OP对两者都感兴趣,因此相关问题表明许多人认为XSLT 1.0不适合日期格式ColinE:作者指定了“XSLT”——而不仅仅是“XSLT 1.0”。此答案中的XSLT 1.0解决方案会对某些日期产生不正确的结果。对不起,我只是认为这是显而易见的。我一眼就能看出,2011年8月11日<代码>可能是不可接受的。@flyn1179:谢谢。请接受并不是所有人都是以英语为母语的人,所以这种语言特点并不明显。我编辑了我的答案来解释这些案例。