【问题标题】:XSLT date-time() function is unknown in ALTOVA XmlSpyXSLT date-time() 函数在 ALTOVA XmlSpy 中未知
【发布时间】:2012-03-30 17:33:38
【问题描述】:

美好的一天!我下载了 Altova XMLSpy 试用版,安装了 FOP 0.95 并尝试执行 XSLT(1.0 版)转换。我的模板是有效的,但在转换过程中,它在包含“date-time()”函数的行上失败:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:dt="http://exslt.org/dates-and-times" xmlns:exsl="http://exslt.org/common" extension-element-prefixes="dt exsl">
<xsl:output method="html" encoding="utf-8" indent="yes"/>

<xsl:template match="/">
    <html>
        <body>
            <xsl:value-of select="dt:date-time()"/>
        </body>
    </html>
</xsl:template>

</xsl:stylesheet>

错误信息是:

Error in XPath expression
Unknown function - Name and number of arguments do not match any function signature in
the static context - 'http://exslt.org/dates-and-times:date-time'

请问如何使这个功能可用?我确定这个功能存在。例如,该模板在这个在线 XSLT 测试器中工作:http://markbucayan.appspot.com/xslt/index.html

提前感谢您!沃杰科技

更新:我安装了 SAXON 9(HE 和 EE),配置 ALTOVA 以使用它,但同样的错误。

【问题讨论】:

  • 当您说“相同的错误”时,您的意思是完全相同的措辞吗?因为这是一条 Altova 错误消息,所以如果您收到此消息,则说明您没有运行 Saxon。使用 system-property('xsl:vendor') 告诉您正在运行哪个 XSLT 处理器。
  • 谢谢迈克尔。当我查询供应商和版本时,我得到这个:供应商 Saxonica,版本 2.0。 “相同的错误”是指与我的问题中所写相同的错误消息。

标签: xslt xslt-1.0 altova


【解决方案1】:

请使用支持 XSL 2.0 的 Altova xml spy 9 版本。

谢谢 阿迪亚

【讨论】:

  • 请阅读已经接受的答案,它在发布之前会遇到问题...您会意识到发布问题的人不能使用 XSL 2.0
  • 问题包含版本信息而不是限制,这就是我建议的原因。
【解决方案2】:
`<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" extension-element-prefixes="msxsl" xmlns:local="urn:local>
<msxsl:script language="CSharp" implements-prefix="local">


public string dateTimeNow()
    {       
      return DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ssZ"); 
    } 

</msxsl:script> </xsl:stylesheet>`

然后像这样使用它&lt;xsl:param name="dnes" select="local:dateTimeNow()"/&gt;

【讨论】:

    【解决方案3】:

    如果您使用 Altova 或 saxon,您可以使用 XSLT2 而不是 XSLT1,因此不需要加载 EXSLT 扩展,xpath2 内置了此功能

    select="current-dateTime()"
    

    http://www.w3.org/TR/xpath-functions/#func-current-dateTime

    【讨论】:

    • 谢谢,不幸的是,我使用 Altova 只是为了开发一个模板,该模板将用于仅支持 XSLT1 的 Web 应用程序。所以我不能使用 XSLT2。
    • 那么在这种情况下,您需要查看您的 Web 应用程序是否支持 exslt 扩展(这不是 xslt 的标准部分),或者对于这种情况可能更简单,只需将当前日期声明为样式表参数,然后将其作为以外部托管语言计算的字符串传递给样式表。
    • 谢谢大卫。是的,Web 应用程序支持 EXSLT。我不是应用程序的所有者,我只需要为它开发一个模板。因为很难使用随 Web 应用程序提供的工具,所以我想在我的机器上本地开发它。不幸的是,EXSLT 似乎无法在我的机器上运行,我不知道为什么。当我打印有关供应商和版本的信息时,我得到这个:供应商 Saxonica,版本 2.0。
    • 大部分 exslt 函数在 saxon(在 saxon 6 之后)中支持,因为它们已被标准 xpath2 函数替换。要测试 xslt1+exslt,请安装 saxon6。
    • 就是这样!我安装了 Saxon 6.5.5(它支持 XSLT1)而不是 Saxon 9,它现在可以工作了。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    相关资源
    最近更新 更多