caching XslCompiledTransform

2007-11-13 @ 16:07#

i do a lot of XSLT work in my code. it's my favorite 'big stick.' i'm ready to hit anything with XSLT [grin]. since i also do lots of HTTP/Web work, the current XslCompiledTransform can be a bit sluggish. on top of that, i use the MvpXslTransform *excellent* Mvp.Xml Library. a bit more added weight with it's cool EXSLT features, etc.

so i needed a way to optimize the compiled transforms without interfering with my general code pattern. i decided to use the ASP.NET Cache object to hold the compiled transform for later re-use. now, even though i'm coding a state-less web-app, i can still reuse the compiled transform when i want to - sweet!

here's the method i use:

// get the requested xsl file, instance as xsldoc and store in memory for later
private MvpXslTransform GetXsl(HttpContext ctx, string xslfile)
    return GetXsl(ctx, xslfile, new XmlUrlResolver());
private MvpXslTransform GetXsl(HttpContext ctx, string xslfile, XmlResolver xmlres)
    MvpXslTransform xsldoc = new MvpXslTransform();
    xsldoc = (MvpXslTransform)ctx.Cache.Get(xslfile);

    if (xsldoc == null)
        xsldoc = new MvpXslTransform();
        xsldoc.Load(xslfile, new XsltSettings(true, false), xmlres);

            new System.Web.Caching.CacheDependency(xslfile),

    return xsldoc;