2008-12-13 5 views
10

.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?

+0

@Boaz: Sí, esta es la respuesta. ¿Puedes, por favor, cerrar la pregunta? –

Respuesta

13

Después de algunas investigaciones me encontré en http://msdn.microsoft.com/en-us/magazine/bb986125.aspx:

3C XPath Tipo -> Equivalente de clases de .NET (Tipo)
String -> System.String
Boolean -> System.Boolean
Número -> System.Double
Resultado árbol Fragmento -> System.Xml.XPath.XPathNavigator
Conjunto de nodos -> System.Xml.XPath.XPathNodeIterator

Cuestiones relacionadas