Как указать встроенный JavaScript в xsl для запуска в саксонской - PullRequest
0 голосов
/ 27 января 2012

У меня есть преобразование xslt, которое отлично работает при запуске в Altova XML Spy, но с ошибками в saxon9he.jar.Ниже приведены фрагменты кода и сообщение об ошибке saxon.

Что нужно сделать по-другому, чтобы использовать saxon в качестве процессора xslt?

<xsl:stylesheet
    version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:fn="http://www.w3.org/2005/xpath-functions"
    xmlns:custom="urn:schemas-microsoft-com:xslt"
    xmlns:js="urn:custom-javascript"
    exclude-result-prefixes="custom js">

    <custom:script language="Javascript" implements-prefix="js">
        <![CDATA[
        function mergeStrings (string1, string2) {
            ... java code ...
        }
    ]]>
    </custom:script>

Пользовательский скрипт вызывается в xpathвыражения, подобные следующему:

<xsl:value-of select="js:mergeStrings(str1, str2)" disable-output-escaping="yes"/>

Используемый мной саксонский вызов похож на следующее:

java -jar C:\saxon9he.jar -s:C:\src.xml -xsl:C:\transform.xslt -o:C:\out.html

Saxon теперь выдает ошибки с сообщением, подобным следующему:

Error at xsl:value-of on line 775 column 105 of transform.xslt:
  XPST0017: XPath syntax error at char 43 on line 775 in {...gs(str1, str2...}:
    Cannot find a matching 2-argument function named {urn:custom-javascript}mergeStrings()

1 Ответ

2 голосов
/ 27 января 2012

Насколько мне известно, Saxon не поддерживает написание функций расширения в Javascript.Вы можете использовать XSLT 2.0 xsl:function для написания функций с чистым XSLT и XPath 2.0, а также можете писать функции расширения (http://www.saxonica.com/documentation/extensibility/intro.xml) на Java для Java-версии Saxon и с .NET для .NET-версии Saxon. Но Javascriptне поддерживается я думаю.

...