コード例 #1
0
ファイル: MvpXslTransform.cs プロジェクト: kisflying/kion
 /// <summary>
 /// Transforms to XmlWriter.
 /// </summary>        
 protected void TransformToWriter(XmlInput defaultDocument, XsltArgumentList xsltArgs, XmlWriter targetWriter)
 {
     XmlWriter xmlWriter;            
     if (this.supportCharacterMaps && this.characterMap != null && this.characterMap.Count > 0)
     {
         xmlWriter = new CharacterMappingXmlWriter(targetWriter, this.characterMap);
     }
     else
     {
         xmlWriter = targetWriter;
     }
     if (this.enforceXHTMLOutput)
     {
         xmlWriter = new XhtmlWriter(xmlWriter);
     }
     XsltArgumentList args = AddExsltExtensionObjectsSync(xsltArgs);
     XmlReader xmlReader = defaultDocument.source as XmlReader;
     if (xmlReader != null)
     {
         this.compiledTransform.Transform(xmlReader, args, xmlWriter, defaultDocument.resolver);
         return;
     }
     IXPathNavigable nav = defaultDocument.source as IXPathNavigable;
     if (nav != null)
     {
         if (defaultDocument.resolver is DefaultXmlResolver)
         {
             this.compiledTransform.Transform(nav, args, xmlWriter);
         }
         else
         {
             TransformIXPathNavigable(nav, args, xmlWriter, defaultDocument.resolver);
         }
         return;
     }
     string str = defaultDocument.source as string;
     if (str != null)
     {
         using (XmlReader reader = XmlReader.Create(str, GetReaderSettings(defaultDocument)))
         {
             this.compiledTransform.Transform(reader, args, xmlWriter, defaultDocument.resolver);
         }
         return;
     }
     Stream strm = defaultDocument.source as Stream;
     if (strm != null)
     {
         using (XmlReader reader = XmlReader.Create(strm, GetReaderSettings(defaultDocument)))
         {
             this.compiledTransform.Transform(reader, args, xmlWriter, defaultDocument.resolver);
         }
         return;
     }
     TextReader txtReader = defaultDocument.source as TextReader;
     if (txtReader != null)
     {
         using (XmlReader reader = XmlReader.Create(txtReader, GetReaderSettings(defaultDocument)))
         {
             this.compiledTransform.Transform(reader, args, xmlWriter, defaultDocument.resolver);
         }
         return;
     }
     throw new Exception("Unexpected XmlInput");
 }
コード例 #2
0
ファイル: MvpXslTransform.cs プロジェクト: kisflying/kion
 /// <summary>
 /// Gets XML Reader settings (customized if there is custom XML resolver)
 /// </summary>        
 /// <returns></returns>
 protected XmlReaderSettings GetReaderSettings(XmlInput defaultDocument)
 {
     if (defaultDocument.resolver is DefaultXmlResolver)
     {
         return DefaultReaderSettings;
     }
     else
     {
         XmlReaderSettings settings = DefaultReaderSettings.Clone();
         settings.XmlResolver = defaultDocument.resolver;
         return settings;
     }
 }
コード例 #3
0
ファイル: MvpXslTransform.cs プロジェクト: kisflying/kion
 /// <summary>
 /// Transforms given <see cref="XmlInput"/> into <see cref="XmlReader"/>.
 /// </summary>
 /// <param name="input">Default input XML document</param>
 /// <param name="arguments">An <see cref="XsltArgumentList"/> containing the namespace-qualified 
 /// arguments used as input to the transform. This value can be a null reference (Nothing in Visual Basic).</param>
 /// <param name="multiThread">Defines in which mode (multithreaded or singlethreaded)
 /// this instance of XslReader will operate</param>
 /// <param name="initialBufferSize">Initial buffer size (number of nodes, not bytes)</param>
 public XmlReader Transform(XmlInput input, XsltArgumentList arguments, bool multiThread, int initialBufferSize)
 {
     XslReader r = new XslReader(this.compiledTransform, multiThread, initialBufferSize);
     r.StartTransform(input, AddExsltExtensionObjectsSync(arguments));
     return r;
 }
コード例 #4
0
ファイル: MvpXslTransform.cs プロジェクト: kisflying/kion
 /// <summary>
 /// Transforms given <see cref="XmlInput"/> into <see cref="XmlReader"/>.
 /// </summary>
 /// <param name="input">Default input XML document</param>
 /// <param name="arguments">An <see cref="XsltArgumentList"/> containing the namespace-qualified 
 /// arguments used as input to the transform. This value can be a null reference (Nothing in Visual Basic).</param>
 public XmlReader Transform(XmlInput input, XsltArgumentList arguments)
 {
     XslReader r = new XslReader(this.compiledTransform);
     r.StartTransform(input, AddExsltExtensionObjectsSync(arguments));
     return r;
 }
コード例 #5
0
ファイル: MvpXslTransform.cs プロジェクト: kisflying/kion
        /// <summary>
        /// Transforms given <see cref="XmlInput"/> into <see cref="XmlOutput"/>.
        /// The <see cref="XsltArgumentList"/> provides additional runtime arguments.
        /// </summary>
        /// <param name="input">Default input XML document.</param>
        /// <param name="arguments">An <see cref="XsltArgumentList"/> containing the namespace-qualified 
        /// arguments used as input to the transform. This value can be a null reference (Nothing in Visual Basic).</param>
        /// <param name="output">Represents the transformation's output.</param>
        /// <returns>Transformation output.</returns>
        public XmlOutput Transform(XmlInput input, XsltArgumentList arguments, XmlOutput output)
        {
            if (input == null) throw new ArgumentNullException("defaltDocument");
            XmlWriter xmlWriter = output.destination as XmlWriter;
            bool closeWriter = false;
            if (xmlWriter == null)
            {
                closeWriter = true;
                while (true)
                {
                    TextWriter txtWriter = output.destination as TextWriter;
                    if (txtWriter != null)
                    {
                        if (multiOutput)
                        {
                            MultiXmlTextWriter mw = new MultiXmlTextWriter(txtWriter, output.XmlResolver);

                            if (this.compiledTransform.OutputSettings.Indent)
                            {
                                mw.Formatting = Formatting.Indented;
                            }
                            xmlWriter = mw;
                        }
                        else
                        {
                            xmlWriter = XmlWriter.Create(txtWriter, this.compiledTransform.OutputSettings);
                        }
                        break;
                    }
                    Stream strm = output.destination as Stream;
                    if (strm != null)
                    {
                        if (multiOutput)
                        {

                            MultiXmlTextWriter mw = new MultiXmlTextWriter(strm, this.compiledTransform.OutputSettings.Encoding, output.XmlResolver);
                            if (this.compiledTransform.OutputSettings.Indent)
                            {
                                mw.Formatting = Formatting.Indented;
                            }
                            xmlWriter = mw;
                        }
                        else
                        {
                            xmlWriter = XmlWriter.Create(strm, this.compiledTransform.OutputSettings);
                        }
                        break;
                    }
                    String str = output.destination as String;
                    if (str != null)
                    {
                        if (multiOutput)
                        {
                            MultiXmlTextWriter mw = new MultiXmlTextWriter(str, this.compiledTransform.OutputSettings.Encoding);
                            if (this.compiledTransform.OutputSettings.Indent)
                            {
                                mw.Formatting = Formatting.Indented;
                            }
                            xmlWriter = mw;
                        }
                        else
                        {
                            XmlWriterSettings outputSettings = this.compiledTransform.OutputSettings.Clone();
                            outputSettings.CloseOutput = true;
                            // BugBug: We should read doc before creating output file in case they are the same
                            xmlWriter = XmlWriter.Create(str, outputSettings);
                        }
                        break;
                    }
                    throw new Exception("Unexpected XmlOutput");
                }
            }
            try
            {
                TransformToWriter(input, arguments, xmlWriter);
            }
            finally
            {
                if (closeWriter)
                {
                    xmlWriter.Close();
                }
            }
            return output;
        }
コード例 #6
0
ファイル: XslReader.cs プロジェクト: kisflying/kion
		/// <summary>
		/// Starts XSL transformation of given <see cref="XmlInput"/> object with
		/// specified <see cref="XsltArgumentList"/>. After this method returns
		/// you can read the transformation output out of XslReader object via 
		/// standard <see cref="XmlReader"/> methods such as Read() or MoveXXX().
		/// </summary>
		/// <remarks>If the <c>StartTransform()</c> method is called when previous
		/// transformation isn't over yet, it will be aborted, buffer cleaned and 
		/// XslReader object reset to an initial state automatically.</remarks>
		/// <param name="input">An input XML to be transformed</param>
		/// <param name="args">A collection of global parameter values and
		/// extension objects.</param>
		/// <returns></returns>
		public XmlReader StartTransform(XmlInput input, XsltArgumentList args)
		{
			this.defaulDocument = input;
			this.args = args;
			Start();
			return this;
		}