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?
@Boaz: Ja, das ist die Antwort. Können Sie bitte die Frage schließen? –