2010-10-14 41 views
2

我想要將xsl + xml轉換爲xml(以便將其轉換爲使用FOP庫的pdf)。我使用的JDK是1.5,並且我無法使用另一個(這是我工作的公司正在使用的)。我讀到java 1.5的xalan jar是導致錯誤的原因之一。導致該錯誤的文字是:錯誤:'非靜態Java函數'evaluate'的第一個參數不是有效的對象引用。'當使用TrasformFactory

"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> 
+0

對不起,復甦這個死的線程;我有同樣的問題。正確聲明名稱空間不能解決問題FWIW。 – 2015-03-25 17:58:16

+0

@Laird Nelson - 我只是(重新)證實它適用於我。你是否得到一個錯誤,或只是沒有產生你期望的結果?仔細檢查你是否也有'extension-element-prefixes =「dyn」'並且你的XPath表達式是正確的。也許張貼一個小例子,並問作爲一個問題得到第二雙眼睛? – 2015-03-25 23:16:20

+1

問題在於'javax.xml.transform.TransformerFactory'的默認實現產生了一個'Transformer',它在封面下使用了Xalan XSLTC_compiler_,而不是_interpreter_,在這種情況下不支持'dyn'。請參閱https://xalan.apache.org/xalan-j/extensions_xsltc.html#exslt_ext。 – 2015-03-26 22:06:11

相關問題