Calling a .NET C# class from XSLT

Posted by HanSolo on Geeks with Blogs See other posts from Geeks with Blogs or by HanSolo
Published on Tue, 13 Apr 2010 22:41:44 GMT Indexed on 2010/04/13 23:53 UTC
Read the original article Hit count: 308

Filed under:

If you've ever worked with XSLT, you'd know that it's pretty limited when it comes to its programming capabilities. Try writing a for loop in XSLT and you'd know what I mean. XSLT is not designed to be a programming language so you should never put too much programming logic in your XSLT. That code can be a pain to write and maintain and so it should be avoided at all costs. Keep your xslt simple and put any complex logic that your xslt transformation requires in a class.

Here is how you can create a helper class and call that from your xslt. For example, this is my helper class:

 public class XsltHelper
    {
        public string GetStringHash(string originalString)
        {
            return originalString.GetHashCode().ToString();
        }
    }

 

And this is my xslt file(notice the namespace declaration that references the helper class):

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:ext="http://MyNamespace">
    <xsl:output method="text" indent="yes" omit-xml-declaration="yes"/>
    <xsl:template  match="/">The hash code of "<xsl:value-of select="stringList/string1" />" is "<xsl:value-of select="ext:GetStringHash(stringList/string1)" />".
    </xsl:template>
</xsl:stylesheet>

 

Here is how you can include the helper class as part of the transformation:

string xml = "<stringList><string1>test</string1></stringList>";
            XmlDocument xmlDocument = new XmlDocument();
            xmlDocument.LoadXml(xml);
 
            XslCompiledTransform xslCompiledTransform = new XslCompiledTransform();
            xslCompiledTransform.Load("XSLTFile1.xslt");
 
            XsltArgumentList xsltArgs = new XsltArgumentList();            
            xsltArgs.AddExtensionObject("http://MyNamespace", Activator.CreateInstance(typeof(XsltHelper)));
 
            using (FileStream fileStream = new FileStream("TransformResults.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite))
            {
                // transform the xml and output to the output file ...
                xslCompiledTransform.Transform(xmlDocument, xsltArgs, fileStream);                
            }

 

© Geeks with Blogs or respective owner