xslt中无法识别xpath函数

时间:2011-01-07 18:39:22

标签: xml xpath xslt

我正在使用xalan处理器在Oxygen中调试xslt样式表。我似乎无法使current-time()或hours-from-time()函数起作用。我收到“找不到功能”错误。我究竟做错了什么?这是代码。

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

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

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

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

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

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

请注意,即使在XPath 2.0中,转换期间current-time()的多次评估也会返回相同的值。因此,通过将当前时间作为参数传递,此函数不会为您提供任何更多功能。

答案 2 :(得分:1)

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

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

  

如果是FunctionCall中的FunctionName   表达式不是NCName(即if   它包含一个冒号),然后就是   被视为对分机的呼叫   功能。 FunctionName已扩展   使用命名空间的名称   评估的声明   上下文。

     

如果XSLT处理器没有   实施扩展   特定名称的功能   可用,然后function-available   函数必须返回false   名称。如果有这样的扩展功能   发生在表达式和   扩展函数实际上被调用,   XSLT处理器必须发出信号   错误。 XSLT处理器一定不能   发出错误只是因为一个   表达式包含扩展名   功能没有实现   是可用的。

     

如果XSLT处理器有   实施扩展   特定名称的功能   可用,然后function-available   函数必须返回true   名称。如果调用这样的扩展名,   然后XSLT处理器必须调用   实现传递它的功能   调用参数;返回的结果   实现返回为   函数调用的结果。