我正在使用xalan处理器在Oxygen中调试xslt样式表。我似乎无法使current-time()或hours-from-time()函数起作用。我收到“找不到功能”错误。我究竟做错了什么?这是代码。
<xsl:variable name="isPm" select="hours-from-time(n1:TIME_REPORT) >= 12"/>
答案 0 :(得分:4)
hours-from-time和current-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处理器必须调用 实现传递它的功能 调用参数;返回的结果 实现返回为 函数调用的结果。