如何将文本转换为日期,然后获取年份值?

问题描述 投票:7回答:1

需要将文本值'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 xslt xslt-2.0 saxon
1个回答
8
投票

我不认为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


0
投票

我正在将您的示例运行到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;

似乎知道命名空间的声明已经存在,因此无法访问该函数。

© www.soinside.com 2019 - 2024. All rights reserved.