2010-10-14 1 views
2

Я пытаюсь преобразовать xsl + xml в xml (для последующего преобразования его в pdf с использованием библиотеки FOP). JDK, который я использую, составляет 1,5, и я не могу использовать другое (именно это использует компания, в которой я работаю). Я прочитал, что jar 1.5 jar 1.5 является ответственным за ошибку. Текст, который вызывает ошибку является:ОШИБКА: «Первый аргумент нестатической функции Java« оценка »не является допустимой ссылкой на объект.» при использовании 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> 

есть способ Arround него, не меняя банку? Есть ли способ написать это по-другому? или я использую неправильный синтаксис?

Спасибо за вашу помощь

ответ

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. –

+0

@ Laird Nelson - Я просто (ре) подтвердил, что он работает для меня. Вы получаете ошибку или просто не ожидаете результата? Дважды проверьте, что у вас также есть 'extension-element-prefixes =" dyn "' и что ваше выражение XPath верное. Может быть, разместите небольшой пример и задайте вопрос, чтобы получить вторую пару глаз? –

+1

Проблема заключается в том, что реализация javax.xml.transform.TransformerFactory по умолчанию создает «Transformer», который под крышками использует Xalan XSLTC _compiler_, а не _interpreter_, а 'dyn' в этом случае не поддерживается. См. Https://xalan.apache.org/xalan-j/extensions_xsltc.html#exslt_ext. –