错误:“非静态 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:未处理的内部错误