public XsltTransformWriter(Writer writer, XmlReader xsltReader, XsltArgumentList arguments, SerializationSettings settings)
            : base(new XmlSerializationSettings(settings), TextCase.CamelCase)
        {
            this.arguments = arguments;

            this.transformation = () => TransformAndWrite(writer, xsltReader);
            this.completeAction = () => { writer.WriteComplete(); };
            this.closeAction    = () => { writer.Close(); xsltReader.Close(); };
            this.flushAction    = () => { writer.Flush(); };

            this.buffer       = new MemoryStream();
            this.bufferWriter = new XmlDocumentWriter(new StreamWriter(this.buffer)
            {
                AutoFlush = true
            }, settings);
        }
        private Reader Transform(XmlDocumentReader documentReader, XmlReader xsltReader)
        {
            var memory = new MemoryStream();
            var writer = new StreamWriter(memory)
            {
                AutoFlush = true
            };
            var reader = new StreamReader(memory);

            var xmlWriter = new XmlDocumentWriter(writer, null);

            documentReader.CopyTo(xmlWriter);
            memory.Position = 0;

            var xmlReader = XmlReader.Create(reader);

            return(Transform(xmlReader, xsltReader));
        }