2008-12-13 46 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

相關問題