需要将文本值'2012-03-19'转换为日期类型,然后提取年份成分。
<xsl:variable name="dateValue" select="2012-03-19"/>
<xsl:variable name="year" select="year-from-date(date($dateValue))"/>
我使用的是Saxon 2.0,但它抱怨date
功能不存在;我环顾了Saxon的文档,但找不到该功能,因此很明显是问题所在,但是我找不到合适的替代品。
我不认为date()
应该是一个函数,您想要xs:date()
数据类型。
添加xs
名称空间,然后添加前缀xs:date()
。
下面的样式表,使用任何格式正确的XML输入,都会产生2012
:
<xsl:stylesheet version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<xsl:variable name="dateValue" select="'2012-03-19'"/>
<xsl:variable name="year" select="year-from-date(xs:date($dateValue))"/>
<xsl:value-of select="$year"/>
</xsl:template>
</xsl:stylesheet>
请注意,您还必须在[dateValue] select
中引用xsl:variable
。
我正在将您的示例运行到webMethods
上,但出现以下错误:
com.wm.app.b2b.server.ServiceException: [XSL.0002.9001] JAXP: Error instantiating transformer - com.wm.pkg.xslt.util.LocalizedTransformerException: [XSL.0002.9002] JAXP:
Error during transformation - org.xml.sax.SAXException: [XSL.0002.9002] JAXP:
Error during transformation - Could not find function: year-from-date;
似乎知道命名空间的声明已经存在,因此无法访问该函数。