1

可変数の引数を持つ XSLT 拡張関数を実装しようとしています。パラメータを配列、params 配列、ICollection などとして宣言すると、次のエラーが発生します (TYPE_NAME は使用される型です)。

System.Xml.Xsl.XslTransformException: Clr 型 'TYPE_NAME' を持つ拡張関数パラメーターまたは戻り値はサポートされていません。

しかし、Umbraco には、concatこのように機能する機能が組み込まれています。Umbraco のソースを調べたところ、次のようになっています。

public static string concat(XPathNodeIterator nodeset){...}

XSLT では、次のように呼び出されます。

concat('a', 'b', 'c')

同様のアプローチを試して、関数を次のように宣言すると:

public static string Test(XPathNodeIterator nodeset){...}

XSLT で同じ方法で呼び出します。

Custom:Test('a', 'b', 'c')

次のエラーが表示されます。

System.Xml.Xsl.XslTransformException: 拡張オブジェクト 'urn:Custom' には、3 つのパラメーターを持つ一致する 'Test' メソッドが含まれていません。

concat の入力が何らかの形で XPathNodeIterator に変換されていると思いますが、その方法がわかりません。助言がありますか?

4

1 に答える 1

4

あなたがしていることには2つの問題があります

  1. キーワードを含むメソッドは、 .NET ドキュメントparamsで指定されているように、拡張関数としてサポートされていません。

備考

不特定数のパラメーターを渡すことができる params キーワードは、現在サポートされていません。params キーワードで定義されたメソッドを使用する XSLT スタイル シートは正しく機能しません。詳細については、「params (C# リファレンス)」を参照してください。

.2. 拡張関数のパラメーターとして使用できるのは、特定の型だけです。これらはここで定義されています:

W3C type             Equivalent .NET class (type)             XPath or XSLT type

String                     System.String                           XPath

Boolean                    System.Boolean                          XPath

Number                     System.Double                           XPath

Result Tree Fragment       System.Xml.XPath.XPathNavigator         XSLT

Node*                      System.Xml.XPath.XPathNavigator         XPath

Node Set                   XPathNodeIterator or XPathNavigator[]   XPath
于 2011-10-27T12:51:34.653 に答える