我正在尝试使用可变数量的参数实现 XSLT 扩展函数。如果我将参数声明为数组、params 数组、ICollection 等。我会收到以下错误(其中 TYPE_NAME 是使用的类型):
System.Xml.Xsl.XslTransformException:不支持具有 Clr 类型“TYPE_NAME”的扩展函数参数或返回值。
concat
但是 Umbraco 有一个以这种方式运行的内置函数。我查看了 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 个参数的匹配“测试”方法。
我猜想 concat 的输入以某种方式在 XPathNodeIterator 中进行了转换,但我无法弄清楚如何。有什么建议么?