【问题标题】:Java/XSLT: Cannot find a matching 1-argument functionJava/XSLT:找不到匹配的 1 参数函数
【发布时间】:2010-10-01 19:10:49
【问题描述】:

我收到以下错误:

javax.servlet.ServletException: Cannot find a matching 1-argument function named {http://exslt.org/dynamic}evaluate()
at org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:841)
at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:774)

我的 xslt 文件的顶部是

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0"   
    xmlns:dyn="http://exslt.org/dynamic" 
    extension-element-prefixes="dyn"> 

你知道我为什么会收到这个错误吗?

更新

现在读取我的 XML 文件的顶部。

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet 
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
     version="1.0"
     xmlns:xalan="http://xml.apache.org/xalan" 
     exclude-result-prefixes="xalan">

我们失败的 XML 是

<xsl:template name="test">
  <xsl:param name="param" />
  <xsl:value-of select="$param"/>
  <xsl:value-of select="xalan:evaluate($param)"/>
</xsl:template>

此代码适用于运行 Tomcat 5.0 的服务器,但不适用于运行 Tomcat 5.5 的服务器。我想是因为代码在一台服务器上运行,而不是环境问题。

XSLT 正在通过 JSP 页面应用于 XML。对我来说,看起来 xalan.jar 文件没有被使用。 JSP 的顶部是:

<%@page import="javax.xml.transform.*"%>
<%@page import="javax.xml.transform.stream.*"%>
<%@page import="         java.security.Principal,
             java.net.URL, 
             java.net.URLConnection, 
             java.io.InputStream,
             java.io.InputStreamReader,
             java.io.Reader,
             java.io.BufferedReader,
             java.io.File,
             javax.xml.transform.*,
             javax.xml.transform.stream.*,
             javax.xml.transform.*,
             javax.xml.transform.stream.*"%>

更新 问题是 Saxon 被选为 XML 解析器。 Saxon 不支持此功能。删除 Saxon.jar 即可解决问题。

【问题讨论】:

    标签: java jsp xslt tomcat xalan


    【解决方案1】:

    您在 XSLT 中的某个地方引用了一个名为“{http://exslt.org/dynamic}evaluate()”的函数,而您没有给它预期的参数数量。

    或者...找不到您要添加的扩展。

    【讨论】:

    • 或者...找不到您要添加的扩展程序。似乎是这样。知道如何找到扩展程序吗?
    【解决方案2】:

    您可能使用的是旧版本的 Xalan

    尝试改用 xalan:evaluate() 扩展名。

    this thread 中了解更多信息。

    【讨论】:

    • 改为使用 xalan:evaluate() 但仍然报同样的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-02
    • 2017-11-06
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    • 2018-05-26
    相关资源
    最近更新 更多