我正在尝试使用可变数量的参数实现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中以某种方式转换,但我无法弄清楚如何。有什么建议吗?
答案 0 :(得分:4)
您正在做的事情有两个问题:
params
关键字的方法
醇>
<强>说明强>
目前不支持params关键字,该关键字允许传递未指定数量的参数。 XSLT样式表 利用params关键字定义的方法不起作用 正确。有关更多信息,请参阅params(C#参考)。
0.2。仅允许某些类型作为扩展功能的参数。这些定义为 here :
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