【问题标题】: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>

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

感谢您的帮助

【问题讨论】:

    标签: java xsl-fo xpath xalan


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 2014-11-28
    • 2019-05-13
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多