2008-12-13 19 views
10

.NET, sözde uzantı nesnesini kullanarak XSLT'yi genişletmeye izin verir. Çok kullanışlı ve çok uygun.XSLT uzantısı nesne yönteminden izin verilen .NET dönüşü türleri nelerdir?

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

tek şey bunu yapmak için gerekenler: Eğer XSLT parçası olarak VerySmartStringConcat başvurabilirsiniz (aşağıya bakın) biraz sihir bekleyen

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

: Bir sınıf oluşturarak bunu ho bulmaktan

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

NET oldukça akıllıdır: gerçekleşmesi bir XsltArgumentList kullanarak, XslCompiledTransform sınıfına (yukarıdaki VeryHandyExtensionFunctions) Uzantınız sınıfının bir örneğini geçmektir w, giriş parametrelerinin giriş tiplerine & dönüş türlerine dönüşü. Ancak, her defasında bir arada bir destek türü hakkında şikayet ediyor. Desteklenen türler nelerdir?

+0

@Boaz: Evet, bu cevaptır. Soruyu kapatır mısın lütfen? –

cevap

13

ben http://msdn.microsoft.com/en-us/magazine/bb986125.aspx üzerinde buldum biraz araştırma sonra:

3C XPath Tipi -> Eşdeğer .NET Sınıf (Tip)
Dize -> System.string
Boolean -> System.Boolean
Sayısı -> System.Double
Hedef Ağaç Parçası -> System.Xml.XPath.XPathNavigator
düğüm kümesi -> System.Xml.XPath.XPathNodeIterator

İlgili konular