错误:“非静态 Java 函数 'evaluate' 的第一个参数不是有效的对象引用。”使用 TrasformFactory 时

Posted

技术标签:

【中文标题】错误:“非静态 Java 函数 \'evaluate\' 的第一个参数不是有效的对象引用。”使用 TrasformFactory 时【英文标题】:ERROR: 'The first argument to the non-static Java function 'evaluate' is not a valid object reference.' when using TrasformFactory错误:“非静态 Java 函数 'evaluate' 的第一个参数不是有效的对象引用。”使用 TrasformFactory 时 【发布时间】:2011-04-25 12:00:11 【问题描述】:

我正在尝试将 xsl + xml 转换为 xml(稍后使用 FOP 库将其转换为 pdf)。我使用的JDK是1.5,我无法使用另一个(这是我工作的公司正在使用的)。我读到 java 1.5 的 xalan jar 是导致错误的原因。导致错误的文本是:

"dyn:evaluate($xpath)"/>

在:

  <xsl:variable name="paramName" select="@name"/>
    <xsl:variable name="xpath"
      select="concat('/doc/data/',$paramName)" /> 
      <fo:inline>
        <xsl:value-of select="dyn:evaluate($xpath)"/>
      </fo:inline>
    </xsl:template>

有没有办法在不改变罐子的情况下解决它?有没有办法以不同的方式编写它?还是我使用了错误的语法?

感谢您的帮助

【问题讨论】:

【参考方案1】:

evaluate() 是一个 EXSLT 扩展函数。它是非标准的,但许多 XSLT 处理器 including xalan 都支持它。

您是否在样式表中声明了 dyn 命名空间前缀,以便正确引用 EXSLT 动态命名空间?

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

...

</xsl:stylesheet>

【讨论】:

抱歉让这个死线复活;我有同样的问题。正确声明命名空间并不能解决 FWIW 问题。 @Laird Nelson - 我刚刚(重新)验证它对我有用。你得到一个错误,或者只是没有产生你期望的结果?仔细检查您是否还有extension-element-prefixes="dyn" 以及您的XPath 表达式是否正确。也许发布一个小例子并提出问题以获得第二双眼睛? 问题是javax.xml.transform.TransformerFactory 的默认实现产生了一个Transformer,它在幕后使用Xalan XSLTC 编译器,而不是解释器 , 和 dyn 在这种情况下不受支持。见xalan.apache.org/xalan-j/extensions_xsltc.html#exslt_ext。

以上是关于错误:“非静态 Java 函数 'evaluate' 的第一个参数不是有效的对象引用。”使用 TrasformFactory 时的主要内容,如果未能解决你的问题,请参考以下文章

Pig 安装错误:错误 pig.Main:错误 2998:未处理的内部错误

Informix 错误:发生了语法错误。错误代码:-201

我收到一个错误:“MetaMask - RPC 错误:错误:错误:[ethjs-rpc] rpc 错误与有效负载”

错误精灵错误跟踪器错误

网页打开显示错误500是啥意思

PHP错误处理