我有一个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()
答案 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不受支持。