From: Oleg T. <he...@us...> - 2005-11-15 22:17:35
|
Update of /cvsroot/mvp-xml/Common/v2/src/Xsl In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13690/v2/src/Xsl Modified Files: IXmlTransform.cs MvpXslTransform.cs Log Message: Index: MvpXslTransform.cs =================================================================== RCS file: /cvsroot/mvp-xml/Common/v2/src/Xsl/MvpXslTransform.cs,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- MvpXslTransform.cs 14 Nov 2005 21:35:48 -0000 1.2 +++ MvpXslTransform.cs 15 Nov 2005 22:17:25 -0000 1.3 @@ -3,7 +3,8 @@ using System.IO; using System.Xml; using System.Xml.Xsl; -using System.Xml.XPath; +using System.Xml.XPath; +using System.Reflection; #endregion namespace Mvp.Xml.Common.Xsl { @@ -16,33 +17,37 @@ this.compiledTransform = transform; } - public virtual void Transform(XmlInput defaulDocument, XsltArgumentList args, XmlOutput output) { + public virtual void Transform(XmlInput defaultDocument, XsltArgumentList args, XmlOutput output) { XmlWriter xmlWriter = output.destination as XmlWriter; bool closeWriter = false; - if (xmlWriter != null) { + if (xmlWriter == null) + { closeWriter = true; - while (true) { - TextWriter txtWriter = output.destination as TextWriter; - if (txtWriter != null) { - xmlWriter = XmlWriter.Create(txtWriter, this.compiledTransform.OutputSettings); - break; - } - Stream strm = output.destination as Stream; - if (strm != null) { - xmlWriter = XmlWriter.Create(strm, this.compiledTransform.OutputSettings); - break; - } - String str = output.destination as String; - if (str != null) { - // BugBug: We should read doc before creating output file in case they are the same - xmlWriter = XmlWriter.Create(str, this.compiledTransform.OutputSettings); - break; - } - throw new Exception("Unexpected XmlOutput"); + + TextWriter txtWriter = output.destination as TextWriter; + if (txtWriter != null) + { + xmlWriter = XmlWriter.Create(txtWriter, this.compiledTransform.OutputSettings); + break; } + Stream strm = output.destination as Stream; + if (strm != null) + { + xmlWriter = XmlWriter.Create(strm, this.compiledTransform.OutputSettings); + break; + } + String str = output.destination as String; + if (str != null) + { + // BugBug: We should read doc before creating output file in case they are the same + xmlWriter = XmlWriter.Create(str, this.compiledTransform.OutputSettings); + break; + } + throw new Exception("Unexpected XmlOutput"); + } try { - TransformToWriter(defaulDocument, args, xmlWriter); + TransformToWriter(defaultDocument, args, xmlWriter); } finally { if (closeWriter) { xmlWriter.Close(); @@ -56,47 +61,48 @@ ReaderSettings.ProhibitDtd = true; } - private void TransformToWriter(XmlInput defaulDocument, XsltArgumentList args, XmlWriter xmlWriter) { - XmlReader xmlReader = defaulDocument.source as XmlReader; + private void TransformToWriter(XmlInput defaultDocument, XsltArgumentList args, XmlWriter xmlWriter) { + XmlReader xmlReader = defaultDocument.source as XmlReader; if (xmlReader != null) { - compiledTransform.Transform(xmlReader, args, xmlWriter, defaulDocument.resolver); + compiledTransform.Transform(xmlReader, args, xmlWriter, defaultDocument.resolver); return; } - string str = defaulDocument.source as string; + IXPathNavigable nav = defaultDocument.source as IXPathNavigable; + if (nav != null) + { + TransformIXPathNavigable(nav, args, xmlWriter, defaultDocument.resolver); + return; + } + string str = defaultDocument.source as string; if (str != null) { using (XmlReader reader = XmlReader.Create(str, ReaderSettings)) { - compiledTransform.Transform(reader, args, xmlWriter, defaulDocument.resolver); + compiledTransform.Transform(reader, args, xmlWriter, defaultDocument.resolver); } return; } - Stream strm = defaulDocument.source as Stream; + Stream strm = defaultDocument.source as Stream; if (strm != null) { using (XmlReader reader = XmlReader.Create(strm, ReaderSettings)) { - compiledTransform.Transform(reader, args, xmlWriter, defaulDocument.resolver); + compiledTransform.Transform(reader, args, xmlWriter, defaultDocument.resolver); } return; } - TextReader txtReader = defaulDocument.source as TextReader; + TextReader txtReader = defaultDocument.source as TextReader; if (txtReader != null) { using (XmlReader reader = XmlReader.Create(txtReader, ReaderSettings)) { - compiledTransform.Transform(reader, args, xmlWriter, defaulDocument.resolver); - } - return; - } - IXPathNavigable nav = defaulDocument.source as IXPathNavigable; - if (nav != null) { - if (defaulDocument.resolver is XmlUrlResolver) { - compiledTransform.Transform(nav, args, xmlWriter); - } else { - // ToDo: It s just API limitation. We can implement it though reflection. - // Limitatio of this approach is that part of MvpXslransform will work only in FullTrust scenarious. - throw new NotImplementedException("IXPathNavigable + XmlResolver is not suported by XslCompiledTransform."); + compiledTransform.Transform(reader, args, xmlWriter, defaultDocument.resolver); } return; - } + } throw new Exception("Unexpected XmlInput"); } + private void TransformIXPathNavigable(IXPathNavigable nav, XsltArgumentList args, XmlWriter xmlWriter, XmlResolver resolver) + { + compiledTransform.GetType().GetMethod( + compiledTransform.Transform(nav, args, xmlWriter); + } + XmlWriterSettings DefaultWriterSettings { get { if (this.compiledTransform != null) { Index: IXmlTransform.cs =================================================================== RCS file: /cvsroot/mvp-xml/Common/v2/src/Xsl/IXmlTransform.cs,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- IXmlTransform.cs 7 Nov 2005 13:58:19 -0000 1.1 +++ IXmlTransform.cs 15 Nov 2005 22:17:25 -0000 1.2 @@ -15,10 +15,11 @@ public class XmlInput { internal object source ; internal XmlResolver resolver; - public XmlInput(XmlReader reader, XmlResolver resolver) { this.source = reader; this.resolver = resolver; } - public XmlInput(TextReader reader, XmlResolver resolver) { this.source = reader; this.resolver = resolver; } - public XmlInput(Stream stream, XmlResolver resolver) { this.source = stream; this.resolver = resolver; } - public XmlInput(String uri , XmlResolver resolver) { this.source = uri ; this.resolver = resolver; } + public XmlInput(XmlReader reader, XmlResolver resolver) { this.source = reader; this.resolver = resolver; } + public XmlInput(TextReader reader, XmlResolver resolver) { this.source = reader; this.resolver = resolver; } + public XmlInput(Stream stream, XmlResolver resolver) { this.source = stream; this.resolver = resolver; } + public XmlInput(String uri , XmlResolver resolver) { this.source = uri ; this.resolver = resolver; } + public XmlInput(IXPathNavigable nav , XmlResolver resolver) { this.source = nav ; this.resolver = resolver; } public XmlInput(XmlReader reader) : this(reader, new XmlUrlResolver()) {} public XmlInput(TextReader reader) : this(reader, new XmlUrlResolver()) {} public XmlInput(Stream stream) : this(stream, new XmlUrlResolver()) {} |