XSLT中的字符串到日期的转换未找到返回函数

时间:2018-11-30 21:48:39

标签: xml xslt xpath

我正在尝试确定当前日期是否在XSLT / XPath中的其他两个日期之间。我发现xs:date(STRING)将日期字符串转换为日期值,然后可以与current-date()比较。

我的问题是尝试此方法时,出现错误,提示该功能不存在。 dateTime也显然不存在。这是我使用的名称空间的代码。

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fn="http://www.w3.org/2005/04/xpath-functions/"
xmlns:xs="http://www.w3.org/2001/XMLSchema/">


        <xsl:if test = "fn:current-dateTime lt fn:date(EndDateActive)
                        and fn:current-dateTime gt fn:date(StartDateActive)">

“结束”和“开始日期”字符串的格式正确为afaik(yyyy-mm-dd),我也尝试了以下选项,它们全部告诉我该功能不存在:

xs:date(EndDateActivate)
xsl:date(EndDateActivate)
fn:dateTime(EndDateActivate)
xs:dateTime(EndDateActivate)
xsl:dateTime(EndDateActivate)

1 个答案:

答案 0 :(得分:0)

有两个问题:

  • fn:current-dateTime()是一个函数。您缺少()
  • fn命名空间是http://www.w3.org/2005/xpath-functions,而不是http://www.w3.org/2005/04/xpath-functions/
    • 在XSLT中,您不需要使用fn:名称空间前缀。您可以只使用current-dateTime()
  • 模式名称空间是http://www.w3.org/2001/XMLSchema,而不是http://www.w3.org/2001/XMLSchema/(删除尾随的/
  • 您正在尝试将xs:dateTimexs:date进行比较
    • 使用current-dateTime()而不是current-date()

对名称空间声明进行以下调整:

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fn="http://www.w3.org/2005/xpath-functions"
xmlns:xs="http://www.w3.org/2001/XMLSchema"

并发送到您的@test

<xsl:if test="fn:current-date() lt xs:date(EndDateActive)
          and fn:current-date() gt xs:date(StartDateActive)">
</xsl:if>