在xslt中无法识别xpath函数

问题描述:

我正在使用xalan处理器在Oxygen中调试xslt样式表。我似乎无法得到当前时间()或时间小时()函数的工作。我收到“找不到功能”错误。我究竟做错了什么?这里是代码。在xslt中无法识别xpath函数

<xsl:variable name="isPm" select="hours-from-time(n1:TIME_REPORT) &gt;= 12"/>

+0

好问题,+1。查看我的答案,了解`current-time()`函数的解释和解决方案。 – 2011-01-08 04:29:27

hours-from-timecurrent-time是XPath 2.0函数。 Xalan仅支持XPath 1.0。的支持的Xalan扩展函数

后来的版本,这将给一些这方面的功能。你正在寻找的功能都以某种形式存在。请注意,由于XPath 1.0不理解日期时间,因此您将处理字符串。不过看到,例如:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:date="http://exslt.org/dates-and-times" extension-element-prefixes="date"> 
    <xsl:template match="/"> 
     <html> 
      <head> 
       <title>Current Date Test</title> 
      </head> 
      <body> 
       <h1>It's now <xsl:value-of select="date:date-time()"/>.</h1> 
      </body> 
     </html> 
    </xsl:template> 
</xsl:stylesheet> 

Xalan Extension Function页,也是EXSLT Extension Function page for Dates and Times两者。

+0

有什么办法可以在xpath 1.0中获得当前时间吗? – whyvez 2011-01-07 20:29:34

那些不是标准的XPath 1.0功能。如果您的处理器具有作为扩展实现的这些功能,那么您应该为它们添加正确的名称空间。

http://www.w3.org/TR/xslt#section-Extension-Functions

如果在一个FunctionCall 表达FunctionName不是NCName来(即,如果 它包含一个冒号),那么它是 ,以一个扩展 函数的调用处理。 FunctionName将 扩展为使用来自评估 上下文的名称空间 声明的名称。

如果XSLT处理器不具有 实现特定名称 的延伸 功能可用,则function-available 功能必须为 名返回false。如果这样一个扩展函数 在表达发生并且 扩展功能实际上是所谓的, XSLT处理器必须发信号通知 错误。 XSLT处理器不能 仅仅发出错误信号,因为 表达包含一个扩展 功能对于没有执行 可用。

如果XSLT处理器有一个 实现特定名称 的延伸 功能可用,那么function-available 功能必须为 名返回true。如果这样的扩展被调用,然后 XSLT处理器必须调用 实现传递函数 调用参数;通过 执行返回的结果返回为函数调用的 结果。

I am debugging an xslt stylesheet in Oxygen using the xalan processor. 

我似乎无法得到 当前时间()或小时的时间() 职能工作。我得到一个“不能 查找功能”的错误。

正如@lavinio和@Alejandro所指出的,这两个函数是在Xalan 2.0中不支持的XPath 2.0中引入的。

您可以将当前时间作为参数传递给XSLT 1.0转换

请注意,即使在XPath 2.0中,转换期间对current-time()的多次评估返回相同的值。所以这个函数不会给你任何东西超过你通过传递当前时间作为参数。