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