Example
<xsl:stylesheet version="1.0" xmlns:bjg="http://ns.com/myext" exclude-result-prefixes="bjg"> <xsl:template match="/"> <SomeOutput> <xsl:value-of select="bjg:SomeMethod()"/> </SomeOutput> </xsl:template> </xsl:stylesheet>
Where the extension(s) are defined in a "mapper extension" xml file (pointed from the btm map file)
<Extensionobjects> <ExtensionObject Namespace="http://ns.com/myext" AssemblyName="MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=123456abc123a123" ClassName="MyAssembly.MyClass" /> </ExtensionObjects>
However it's less straight forward to test the xsl outside of Biztalk.
The xslt-compiled-transform requires information relating to these assemblies along with the test xml instance.
The orginal map extensions file can be utilised to do this with the following code, which loads an xsl argument list to be applied to the xsl-compiled transform (possibly to be run from a test)
XmlDocument xmld = new XmlDocument(); xmld.Load(mapperExtensionsFilePath); XmlNodeList ns = xmld.SelectNodes("/ExtensionObjects/ExtensionObject"); // load each extension foreach (XmlNode n in ns) { // get attributes string assemblyName = n.SelectSingleNode("@AssemblyName").InnerText; string theNamespace = n.SelectSingleNode("@Namespace").InnerText; string className = n.SelectSingleNode("@ClassName").InnerText; // find type foreach (Type t in Assembly.Load(assemblyName).GetTypes()) { if (t.FullName.Equals(className) ) { xslArgs.AddExtensionObject(theNamespace, Activator.CreateInstance(t)); break; } } } // get next extension
No comments:
Post a Comment