我是XSLT的新手,我已经完成了基本的转换.接下来我想尝试日期操作,因为我的数据将有时间戳.但是,我似乎无法使用任何日期功能,这让我非常沮丧.我正在使用Firefox 3.5,xsltproc 1.1.24,xalan 1.10和XMLSpy 2009进行测试,他们都说我尝试使用的功能不存在.
我的xml看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="datetime.xsl"?>
<watcher>
<event id="1" date="2009-09-04T13:49:10-0500" type="ABCD">This is a test </event>
</watcher>
</code>
Run Code Online (Sandbox Code Playgroud)
我的xsl看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fn="http://www.w3.org/2005/02/xpath-functions"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:template match="event[@type='ABCD']">
<!-- Date: <xsl:value-of select="day-from-dateTime(xs:dateTime(@date))"/> -->
<!-- Date: <xsl:value-of select="day-from-dateTime(@date)"/> -->
Date: <xsl:value-of select="fn:day-from-dateTime(@date)"/>
</xsl:template>
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)
如果我制作样式表版本2,XMLSpy会抱怨它无法投射我的日期: XSLT 2.0 Debugging Error: Error in XPath 2.0 expression (Cast failed, invalid lexical value - xs:dateTime '2009-09-04T13:49:10-0500')
如果我将其保留为版本1,它会抱怨不同的错误: XSLT 1.0 Debugging Error: Error in XPath expression (Unknown function - Name and number of arguments do not match any function signature in the static context - 'day-from-dateTime')
每当我尝试更改XSL以使用命名空间(例如fn:day-from-dateTime)时,它都会拒绝工作,我的所有解析器都会说明它The function number 'http://www.w3.org/2005/02/xpath-functions:day-from-dateTime' is not available及其变体.我从其他测试中知道我可以完美地使用substring()函数,而不需要任何名称空间前缀,并且我相信它与day-from-dateTime位于相同的名称空间中.
我觉得它非常容易,因为所有的教程都显示了正在使用的功能,但似乎有些东西在逃避我.有人能告诉我我错过了什么吗?
哎呀,讨厌的版本在这里发生的事情.您所看到的许多问题都将是因为您使用的XSLT处理器不支持XPath 2.0,这是日常时间函数的来源.
我可以使用Saxon处理器 - Saxon-B 9.1.0.6作为我的处理器而不是Xalan 来获得你想要做的工作.(根据文档,Xalan似乎只支持XPath 1.0 )
您的文档中存在一些错误:
源文档的时区应为05:00,而不是0500
<?xml version="1.0" encoding="UTF-8"?>
<watcher>
<event id="1" date="2009-09-04T13:49:10-05:00" type="ABCD">This is a test </event>
</watcher>
Run Code Online (Sandbox Code Playgroud)
XSLT应该将字符串2009-09-04T13:49:10-05:00转换为xs:dateTime,这是day-from-dateTime的参数类型.
Date: <xsl:value-of select="day-from-dateTime(xs:dateTime(@date))"/>
Run Code Online (Sandbox Code Playgroud)
然后它的工作原理
<?xml version="1.0" encoding="UTF-8"?>
Date: 4
Run Code Online (Sandbox Code Playgroud)
希望有所帮助,
| 归档时间: |
|
| 查看次数: |
14358 次 |
| 最近记录: |