如何在xsl中指定要在saxon中运行的内联javascript

时间:2012-01-27 14:56:44

标签: javascript xslt-2.0 saxon

我有一个xslt转换,在Altova XML Spy中运行时可以正常工作,但是在saxon9he.jar中有错误。 请参阅下面的代码片段和撒克逊错误消息。

使用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 个答案:

答案 0 :(得分:2)

据我所知,Saxon不支持在Javascript中编写扩展函数。您可以使用XSLT 2.0 xsl:function使用纯XSLT和XPath 2.0编写函数,并且可以使用Java编写Java的扩展函数(http://www.saxonica.com/documentation/extensibility/intro.xml) Saxon的版本和.NET版的Saxon .NET。但我认为Javascript不受支持。