2011-12-08 16 views
-3

私は変換用のXSLTスタイルシートを持っています。ここでは、<xsl:function>を使用してユーザー定義関数を指定する必要があります。私がこれを<xsl:stylesheet></xsl:stylesheet>の中でこれをしようとすると、それはエラーを投げます。ここでXSLT:ユーザー定義関数を宣言する方法

は関数である。

<xsl:function name="functx:pad-string-to-length" as="xs:string" 
       xmlns:functx="http://www.functx.com" > 
    <xsl:param name="stringToPad" as="xs:string?"/> 
    <xsl:param name="padChar" as="xs:string"/> 
    <xsl:param name="length" as="xs:integer"/> 

    <xsl:sequence select=" 
    substring(
    string-join (
     ($stringToPad, for $i in (1 to $length) return $padChar) 
     ,'') 
    ,1,$length) 
"/> 

</xsl:function> 
+2

どのようなエラーが表示されますか? –

+1

また、 'xsl:function'はXSLT 2.0の新機能で、どのXSLT 1.0プロセッサでもサポートされていないXSLTプロセッサを教えてください。したがって、Saxon 9やAltovaXML、XQSharp、XSLT 2.0プロセッサーを使用しない限り、IBMとIntelは 'xsl:function'を使うことはできません。 –

+2

質問を下落させました。エラーが何であるかを教えてくれずに、エラーが発生していると教えてもらえません。 –

答えて

0

@ジョン・ミッチェルは、エラーが役に立つかもしれませんが何であるかを告げて、言ったように。しかし、関数上で宣言されているネームスペースがあることがわかります。xmlns:functx="http://www.functx.com"もスタイルシートの上部にある<xsl:stylesheet>要素で宣言してください。

もう1つのことは、明らかに関数呼び出しで引数を正しく入力していることです。最初の2つのパラメータは引用符を必要としますが、3番目のパラメータは不要です(例:<xsl:value-of select="functx:pad-string-to-length('boo', '-', 12)"/>)。

1

質問に定義されている関数は構文的に正しいものであり、意味があるようです。

このエラーは、私たちに忘れてしまったコード - より具体的には、どのような引数でこの関数をどのように使用しているかにあります。

これ以外に、不要なstring-join()concat()に置き換えるなど、明らかなリファクタリングの可能性があります。

関連する問題