.NET permite extender XSLT utilizando el llamado objeto de extensión. Muy práctico y muy conveniente. Lo hace mediante la creación de una clase:¿Cuáles son los tipos de retorno de .NET permitidos a partir de un método de objeto de extensión XSLT?
public class VeryHandyExtensionFunctions
{
public string VerySmartStringConcat(XPathNodeIterator NodeList)
{
return "some very smart string concat based on NodeList";
}
}
en espera de un poco de magia (ver abajo) puede hacer referencia a VerySmartStringConcat como parte de su XSLT:
<xsl:value-of select="someprefix:VerySmartStringConcat(nodes[@withsomeattribute])"/>
La única cosa que hacer con el fin de hacerla pasar es que pasar una instancia de la clase de extensión (VeryHandyExtensionFunctions arriba) para la clase XslCompiledTransform, utilizando un 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 es bastante inteligente en averiguar ho w para convertir los tipos XML a los parámetros de entrada & tipos de devolución de las funciones de extensión. Sin embargo, de vez en cuando se queja de un tipo que no es de soporte. ¿Cuáles son los tipos compatibles?
@Boaz: Sí, esta es la respuesta. ¿Puedes, por favor, cerrar la pregunta? –