2008-12-13 45 views
10

.NET允许通过使用所谓的扩展对象来扩展XSLT。非常方便,非常方便。XSLT扩展对象方法允许的.NET返回类型是什么?

public class VeryHandyExtensionFunctions 
{ 
    public string VerySmartStringConcat(XPathNodeIterator NodeList) 
    { 
     return "some very smart string concat based on NodeList"; 
    } 
} 

未决的一些魔术(参见下文),你可以参考VerySmartStringConcat作为XSLT的一部分:

<xsl:value-of select="someprefix:VerySmartStringConcat(nodes[@withsomeattribute])"/> 

唯一以使其做您可以通过创建一个类这样做发生的是通过你的扩展类(以上VeryHandyExtensionFunctions)到XslCompiledTransform类的实例,使用的XsltArgumentList:

XsltArgumentList xsltArg = new XsltArgumentList(); 
xsltArg.AddExtensionObject("SomeUriResolvingToSomePrefix",new VeryHandyExtensionFunctions); 
XslCompiledTransform xslTransform; 
XmlWriter W = XmlWriter.Create(SomeTarget, Xslt.OutputSettings); 
xslTransform.Transform(SomeXmlDocument, xsltArg, W); 

.NET是相当聪明搞清楚浩w将XML类型转换为输入参数&返回类型的扩展函数。然而,每隔一段时间它就会抱怨不支持类型。什么是支持的类型?

+0

@Boaz:是的,这就是答案。请问你能解决这个问题吗? – 2008-12-14 19:42:18

回答

13

经过一番研究,我发现这个在http://msdn.microsoft.com/en-us/magazine/bb986125.aspx

3C XPath的类型 - >等的.NET类(类型)
字符串 - > System.String
布尔 - > System.Boolean
号码 - > System.Double
结果树片段 - > System.Xml.XPath.XPathNavigator类
节点集 - > System.Xml.XPath.XPathNodeIterator

相关问题