2008-12-13 7 views
10

Mit .NET können Sie XSLT erweitern, indem Sie das so genannte Erweiterungsobjekt verwenden. Sehr praktisch und sehr praktisch. Sie tun dies, indem eine Klasse zu erstellen:Was sind die zulässigen .NET-Rückgabetypen von einer XSLT-Erweiterungsobjektmethode?

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

etwas Magie anhängig ist (siehe unten), die Sie VerySmartStringConcat als Teil Ihrer Xslt verweisen:

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

Das einzige, was zu tun, um es zu machen, geschehen ist eine Instanz der Erweiterungsklasse (VeryHandyExtensionFunctions oben) an die XslCompiledTransform Klasse übergeben, eine XsltArgumentList mit:

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

.NET ist ziemlich intelligent in herauszufinden, ho w, um die XML-Typen in die Eingabeparameter & Rückgabetypen der Erweiterungsfunktionen zu konvertieren. Ab und zu beschwert es sich jedoch über einen Nicht-Support-Typ. Was sind die unterstützten Typen?

+0

@Boaz: Ja, das ist die Antwort. Können Sie bitte die Frage schließen? –

Antwort

13

Nach einigen Recherchen habe ich dies auf http://msdn.microsoft.com/en-us/magazine/bb986125.aspx gefunden:

3C XPath Typ -> Entspricht .NET-Klasse (Typ)
String -> System.String
Boolean -> System.Boolean
Number -> System.Double
Ergebnisbaum-Fragment -> System.Xml.XPath.XPathNavigator
Node Set -> System.Xml.XPath.XPathNodeIterator

Verwandte Themen