コード例 #1
0
        /// <summary>
        /// Processes the XSL template.
        /// </summary>
        /// <param name="xslBody">The XSL body.</param>
        /// <param name="context">The context.</param>
        /// <returns>System.String.</returns>
        private string ProcessXslTemplate(string xslBody, IDictionary <string, object> context)
        {
            // 1. Serialize all context variables into XML
            using (var stream = new MemoryStream())
            {
                // Start creating xml document
                using (var exportWriter = new NoNamespacesXmlTextWriter(stream))
                {
                    // Start the Xml Document
                    exportWriter.WriteStartDocument();

                    exportWriter.WriteStartElement("ContextDoc", "");

                    // Cycle through dictionary
                    foreach (var key in context.Keys)
                    {
                        var contextObject = context[key];
                        var serializer    = new DataContractSerializer(contextObject.GetType());
                        serializer.WriteObject(exportWriter, contextObject);
                    }

                    exportWriter.WriteEndElement();                     // End of ContextDoc
                    exportWriter.WriteEndDocument();
                    exportWriter.Flush();
                    //exportWriter.Close();

                    // 2. Locate XSL Template
                    using (var xslStream = new MemoryStream())
                    {
                        var bytes = Encoding.UTF8.GetBytes(xslBody);
                        xslStream.Write(bytes, 0, bytes.Length);
                        xslStream.Position = 0;

                        using (var reader = XmlReader.Create(xslStream))
                        {
                            var xslt = new XslCompiledTransform();
                            xslt.Load(reader);

                            // 3. Transform Content
                            stream.Position = 0;
                            var pathDoc = new XPathDocument(stream);

                            using (var writer = new StringWriter())
                            {
                                xslt.Transform(pathDoc, null, writer);

                                // Return contents
                                return(writer.ToString());
                            }
                        }
                    }
                }
            }
        }
コード例 #2
0
        /// <summary>
        /// Processes the XSL template.
        /// </summary>
        /// <param name="xslBody">The XSL body.</param>
        /// <param name="context">The context.</param>
        /// <returns>System.String.</returns>
		private string ProcessXslTemplate(string xslBody, IDictionary<string, object> context)
		{
			// 1. Serialize all context variables into XML            
			using (var stream = new MemoryStream())
			{
				// Start creating xml document
				using (var exportWriter = new NoNamespacesXmlTextWriter(stream))
				{
					// Start the Xml Document
					exportWriter.WriteStartDocument();

					exportWriter.WriteStartElement("ContextDoc", "");

					// Cycle through dictionary
					foreach (var key in context.Keys)
					{
						var contextObject = context[key];
						var serializer = new DataContractSerializer(contextObject.GetType());
						serializer.WriteObject(exportWriter, contextObject);
					}

					exportWriter.WriteEndElement(); // End of ContextDoc
					exportWriter.WriteEndDocument();
					exportWriter.Flush();
					//exportWriter.Close();

					// 2. Locate XSL Template
					using (var xslStream = new MemoryStream())
					{
						var bytes = Encoding.UTF8.GetBytes(xslBody);
						xslStream.Write(bytes, 0, bytes.Length);
						xslStream.Position = 0;

						using (var reader = XmlReader.Create(xslStream))
						{
							var xslt = new XslCompiledTransform();
							xslt.Load(reader);

							// 3. Transform Content
							stream.Position = 0;
							var pathDoc = new XPathDocument(stream);

							using (var writer = new StringWriter())
							{
								xslt.Transform(pathDoc, null, writer);

								// Return contents
								return writer.ToString();
							}
						}
					}
				}
			}
		}