2017-10-31 13 views
0

パラメータ付きの関数を作成する際に小さな助けが必要で、テンプレートで使用できます。多くのことを試しましたが、何もうまくいかなかった。以下は私のサンプルコードは次のとおりです。XSLT 1.0で引数付き関数を作成する必要があります

<?xml version="1.0" encoding="utf-8"?> 
 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
 
    version="1.0" 
 
    xmlns:math="http://exslt.org/math" 
 
    xmlns:func="http://exslt.org/functions" 
 
    xmlns:my="http://exslt.org/my" 
 
    exclude-result-prefixes="my" 
 
    extension-element-prefixes="my math func"> 
 
    <xsl:output indent="yes" method="xml" /> 
 

 
    
 
    <xsl:variable name="functionTest11"> 
 
     <xsl:value-of select="my:calXY('aa')" /> 
 
    </xsl:variable> 
 
\t 
 
    <xsl:template match="/"> 
 

 
     <svg xmlns="http://www.w3.org/2000/svg"> 
 
      <xsl:variable name="functionTest22"> 
 
       <xsl:value-of select="my:calXY" /> 
 
      </xsl:variable> 
 
      <xsl:comment>functionTest <xsl:copy-of 
 
       select="$functionTest22" /></xsl:comment> 
 
     </svg> 
 

 
    </xsl:template> 
 
\t 
 
\t <func:function name="my:calXY"> 
 
     <xsl:comment>functionHello </xsl:comment> 
 
     <xsl:param name="string1" select="''"/> 
 
     <func:result> 
 
      <xsl:value-of select="concat(10,'|',10)" /> 
 
     </func:result> 
 
    </func:function> 
 
</xsl:stylesheet>

+0

どのXSLTプロセッサを使用していますか?あなたはそれがEXSLTスタイルのユーザ定義関数をサポートしていると信じる理由がありますか?あなたのプロセッサーはどんなエラーを起こしていますか? –

+0

こんにちは@ C.M.Sperberg-McQueen以下は私が得るエラーです:エラー: 'クラス'私の 'を見つけることができません。 致命的なエラー: '外部メソッド' my.calXY '(パブリックである必要があります)を見つけることができません。' **変圧器工場のエラー javax.xml.transform.TransformerConfigurationException:外部メソッド 'my.calXY'(パブリックである必要があります)が見つかりません。 –

+0

そのエラーコード(および私が言及した他の質問に対する回答)をあなたの質問に追加すると、その質問は回答を見つける良い機会になります。 –

答えて

0

私はあなたが使用しているXSLTプロセッサのように見えるのXalanへの便利なアクセスを(私の知っていること)、持っていません。だから私はあなたの問題の起源についての何らかの推測をテストすることはできません。

しかし、xsl:paramが正しい前にxsl:commentのような出力命令を出すと、私はかなり驚くでしょう。 (あなたがスタイルシートコンパイラからのエラーメッセージを報告しないのは驚きですが、Xalanが関数を正常にコンパイルしなかったというエラーメッセージからはっきりしています)あなたの関数を持つことによって達成しようとしていることははっきりしませんコメントノードと文字列値'10 | 10 'の両方を返しますが、これはおそらくそれを達成する方法ではありません。 xsl:comment命令が関数が実際に評価されていることを確認しようとする試みであるという仮定に

、私は[

<func:function name="my:calXY"> 
    <xsl:param name="string1" select="''"/> 
    <func:result select="concat(10,'|',10)" /> 
</ 

のようなものを試してみたこの回答の以前のバージョンでは、私がいることを推測func:resultはここでは必要ありません。私のエラー。必要なように見えるん。]あなたは完全にスタイルシートを頼む


。次のスタイルシートは、xsltprocで実行したときに期待通りに機能します。 (上記のとおり、Xalanを実行する便利な方法はありません)

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0" 
    xmlns:func="http://exslt.org/functions" 
    xmlns:my="http://example.org/my" 
    exclude-result-prefixes="my" 
    extension-element-prefixes="func"> 
    <xsl:output indent="yes" method="xml" /> 

    <xsl:template match="/"> 
    <xsl:message>Result is <xsl:value-of select="my:dummy('foo')"/></xsl:message> 
    <output> 
     <test><xsl:value-of select="my:dummy('bar')"/></test> 
     <test><xsl:value-of select="my:dummy('baz')"/></test> 
    </output>  
    </xsl:template> 

    <func:function name="my:dummy"> 
    <xsl:param name="s" select="'foo'"/> 
    <func:result select="concat($s,'|',$s)" /> 
    </func:function> 

</xsl:stylesheet> 
+0

こんにちは@ C.M.Sperberg-McQueen xsl:メソッドが呼び出されたかどうかだけを確認するためのコメントが使用されていました。 func:resultは、どこから呼び出されたかの値を返すために使用されています。私はすでにあなたが共有しているサンプル関数を試しましたが、私は私のコメントで述べたのと同じエラーを受け取ります。可能であれば、関数があり、