Javascript 使用xsl设置XML日期格式
我有一个XML文档。我从XML中获取这个“2011-08-01”格式的日期。 我必须使用Java脚本或XSL以“2011年8月8日”格式显示相同的日期。 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解决
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:谢谢。请接受并不是所有人都是以英语为母语的人,所以这种语言特点并不明显。我编辑了我的答案来解释这些案例。