2012-01-27 17 views
0

私は、Altova XML Spyで実行するとうまく動作しますが、saxon9he.jarでエラーが発生するxslt変換があります。 コードスニペットとsaxonエラーメッセージについては、以下を参照してください。サクソンで実行するxslのインラインJavaScriptを指定する方法

サクソンを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 

サクソン同様のメッセージとエラー次のようになります。

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() 

答えて

2

私が知っている限り、SaxonはJavascriptで拡張関数を書くことをサポートしていません。 XSLT 2.0 xsl:functionを使用すると、純粋なXSLTおよびXPath 2.0で関数を記述することができます.SaxonのJavaバージョン用にJavaで拡張関数(http://www.saxonica.com/documentation/extensibility/intro.xml)を記述することができます。 Saxonの.NET版には.NETを使用しています。しかし、Javascriptはサポートされていないと思います。

+0

明確な答え - saxonのdocページに記載されている "統合拡張機能"機能を使用してsaxon内ですべての作業を行うには、ここで特別な努力を払う必要があります。 – Maestro13

+1

XSLTとXPath 2.0とECMAScript/Javascriptのパワー比較私はなぜ拡張機能に依存するのではなく 'mergeStrings'を' xsl:function'で実装できないのだろうかと思います。しかし、私たちは機能コードの詳細や明確な要件の説明を見る必要があります。すべてが最高の別の投稿で行われています。 –

関連する問題