Xslt Transformation Helper
using System; using System.IO; using System.Collections.ObjectModel; using System.Collections.Generic; using System.Text; using System.Xml; using System.Xml.Xsl; using System.Xml.XPath; namespace A4G.Utils.Xml { public class XsltTransformationHelper : IDisposable { private bool _disposed = false; public XsltTransformationHelper(string xsltPath) { _xsltPath = xsltPath; _xsltReader = new XmlTextReader(XsltPath); XslTransform.Load(_xsltReader); } ~XsltTransformationHelper() { Dispose(false); } private readonly string _xsltPath; public string XsltPath { get { return _xsltPath; } } private XslCompiledTransform _transform = new XslCompiledTransform(); private XslCompiledTransform XslTransform { get { return _transform; } } private readonly XmlReader _xsltReader; private XmlReader XsltReader { get { return _xsltReader; } } public byte[] TransformWithXslt(byte[] sourceBytes) { MemoryStream source = new MemoryStream(sourceBytes, false); XmlReader xmlReader = new XmlTextReader(source); MemoryStream destination = new MemoryStream(); byte[] destinationBytes = null; try { XslTransform.Transform(xmlReader, null, destination); destinationBytes = destination.ToArray(); } finally { destination.Close(); xmlReader.Close(); source.Close(); } return destinationBytes; } #region IDisposable Members public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } private void Dispose(bool disposing) { if (_disposed) { return; } if (disposing) { // clean up managed resources XsltReader.Close(); } // clean up unmanaged resources _disposed = true; } #endregion } }