EXSLT date:格式化不带文档的日期模板()XSLT 1.0
我使用XSLT1.0和MSXML3.0作为处理器 我的日期:格式化日期模板EXSLT文件的声明为:EXSLT date:格式化不带文档的日期模板()XSLT 1.0,xslt,date,document,msxml,exslt,Xslt,Date,Document,Msxml,Exslt,我使用XSLT1.0和MSXML3.0作为处理器 我的日期:格式化日期模板EXSLT文件的声明为: <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:date="http://exslt.org/dates-and-times" xmlns:str="http://e
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:date="http://exslt.org/dates-and-times"
xmlns:str="http://exslt.org/strings"
extension-element-prefixes="msxsl date str">
...
</xsl:stylesheet>
...
由于第三方的限制,我无法使用document()函数。因此,我更改了XML代码片段中的月份和天数(类似):
<date:months>
<date:month length="31" abbr="Jan">January</date:month>
<date:month length="28" abbr="Feb">February</date:month>
<date:month length="31" abbr="Mar">March</date:month>
<date:month length="30" abbr="Apr">April</date:month>
<date:month length="31" abbr="May">May</date:month>
<date:month length="30" abbr="Jun">June</date:month>
<date:month length="31" abbr="Jul">July</date:month>
<date:month length="31" abbr="Aug">August</date:month>
<date:month length="30" abbr="Sep">September</date:month>
<date:month length="31" abbr="Oct">October</date:month>
<date:month length="30" abbr="Nov">November</date:month>
<date:month length="31" abbr="Dec">December</date:month>
</date:months>
<xsl:variable name="months">
<month length="31" abbr="Jan">January</month>
<month length="28" abbr="Feb">February</month>
<month length="31" abbr="Mar">March</month>
<month length="30" abbr="Apr">April</month>
<month length="31" abbr="May">May</month>
<month length="30" abbr="Jun">June</month>
<month length="31" abbr="Jul">July</month>
<month length="31" abbr="Aug">August</month>
<month length="30" abbr="Sep">September</month>
<month length="31" abbr="Oct">October</month>
<month length="30" abbr="Nov">November</month>
<month length="31" abbr="Dec">December</month>
</xsl:variable>
一月
二月
前进
四月
也许
六月
七月
八月
九月
十月
十一月
十二月
到变量:
<date:months>
<date:month length="31" abbr="Jan">January</date:month>
<date:month length="28" abbr="Feb">February</date:month>
<date:month length="31" abbr="Mar">March</date:month>
<date:month length="30" abbr="Apr">April</date:month>
<date:month length="31" abbr="May">May</date:month>
<date:month length="30" abbr="Jun">June</date:month>
<date:month length="31" abbr="Jul">July</date:month>
<date:month length="31" abbr="Aug">August</date:month>
<date:month length="30" abbr="Sep">September</date:month>
<date:month length="31" abbr="Oct">October</date:month>
<date:month length="30" abbr="Nov">November</date:month>
<date:month length="31" abbr="Dec">December</date:month>
</date:months>
<xsl:variable name="months">
<month length="31" abbr="Jan">January</month>
<month length="28" abbr="Feb">February</month>
<month length="31" abbr="Mar">March</month>
<month length="30" abbr="Apr">April</month>
<month length="31" abbr="May">May</month>
<month length="30" abbr="Jun">June</month>
<month length="31" abbr="Jul">July</month>
<month length="31" abbr="Aug">August</month>
<month length="30" abbr="Sep">September</month>
<month length="31" abbr="Oct">October</month>
<month length="30" abbr="Nov">November</month>
<month length="31" abbr="Dec">December</month>
</xsl:variable>
一月
二月
前进
四月
也许
六月
七月
八月
九月
十月
十一月
十二月
相应地,我将最初使用document()函数的代码从:[从EXSLT样式表的月份处理位开始]
<xsl:variable name="month-node" select="document('')/*/date:months/date:month[number($month)]" />
要使用MSXML3.0节点集功能:
<xsl:variable name="month-node" select="msxsl:node-set($months)/month[number($month)]" />
所以我认为这是可行的
根据EXLT指令“格式模式字符串解释为JDK1.1所述”[我使用的是当前版本]我根据“dd-MMMMM-yyyy”指定月份,以便月份将是完整月份的名称,例如一月。但它不起作用:(我在EXSLT样式表中查看过,它有这样做的逻辑。还有使用“E”模式显示一天的周名称的逻辑,这对我不起作用。可能是从使用document()更改为变量打破了它 非常感谢您的帮助 非常感谢 示例
<xsl:call-template name="date:format-date">
<xsl:with-param name="date-time" select="'2010-07-01'"/>
<xsl:with-param name="pattern" select="'dd MMMMM yyyy'" />
</xsl:call-template>
据我从文件中了解,这将导致2010年7月1日
<xsl:call-template name="date:format-date">
<xsl:with-param name="date-time" select="'2010-07-01'"/>
<xsl:with-param name="pattern" select="'EEE, dd MMMMM yyyy'" />
</xsl:call-template>
这将导致2010年7月1日星期一,我得到的是,2010年7月1日当您对XML的无根片段(如您的月列表)使用
msxml:node set
时,该函数会自动创建一个根来包含该片段
因此,在您的情况下,节点集的路径是错误的:
msxsl:node-set($months)/month[number($month)]
这是错误的,因为/month
不是$months
的根。您可以跳过人工根并直接转到month来轻松修复它:
msxsl:node-set($months)//month[number($month)]
请注意/
运算符,而不是/
运算符
编辑
经过测试,我发现我错了。事实上,您使用的原始代码段对我来说运行良好。
/
运算符是不必要的。您确定您的$month
变量设置正确吗?根据您引用的EXSLT页面():
目前没有XSLT处理器
我们知道这种支持
日期:本机设置日期格式
您使用的是什么实现?MSXML似乎不支持它。@Welbog:我想是的。我已经编辑了$months的结构,以便在没有文档()的情况下使用它。我确实得到了结果,但格式不正确。我在问题中添加了示例。