⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmltransformer.cs

📁 ASP C#代码实例 适合初学人士学习使用
💻 CS
字号:
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml;
using System.Xml.Xsl;
using System.IO;

namespace Example_12_22
{
	/// <summary>
	/// A simple to use XSL-template driven, XML-data using content provider
	/// </summary>	
	[ParseChildren(false)]
	public class XmlTransformer : WebControl
	{		
		#region Public Properties		
		/// <summary>
		/// XML content file to use
		/// </summary>
		public string ContentFile
		{
			get{return contentFile;}
			set{contentFile = value;}
		}
		private string contentFile;
		
		/// <summary>
		/// XSL template file
		/// Can use an external XSL template instead of inline
		/// </summary>
		public string TemplateFile
		{
			get{return templateFile;}
			set{templateFile = value;}
		}
		private string templateFile;

		/// <summary>
		/// Inline XSL template match path
		/// The XPath for the XSL template match
		/// </summary>
		public string TemplateMatch
		{
			get{return templateMatch;}
			set{templateMatch = value;}
		}
		private string templateMatch = "/content";

		#endregion		

		#region Private Properties
		/// <summary>
		/// Default XSL Template shell document
		/// </summary>
		private string XSLTemplate
		{
			get{return xSLTemplate;}
			set{xSLTemplate = value;}
		}
		private string xSLTemplate = "<?xml version=\"1.0\" encoding=\"utf-8\"?><xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"><xsl:template match=\"{1}\"><processedContent>{0}</processedContent></xsl:template></xsl:stylesheet>";
		#endregion
				
		/// <summary> 
		/// Render control
		/// </summary>		
		protected override void Render(HtmlTextWriter writer)
		{
			#region Load content, apply XSL and write out to control
			// Load Content XML
			XmlDocument ContentDocument = new XmlDocument();
			ContentDocument.Load(String.Format(@"{0}\{1}", this.Page.Server.MapPath("."), this.ContentFile));

			// Load Template XSL
			XmlDocument TransformDocument = new XmlDocument();
			if (this.TemplateFile != null)			
				// Use external template file				
				TransformDocument.Load(string.Format(@"{0}\{1}", this.Page.Server.MapPath("."), this.TemplateFile));			
			else		
			{
				// Use inline template literal content
				string LiteralContent = "";

				// Construct from literal content of this control
				foreach(Control CurrentControl in this.Controls)
					if (CurrentControl is LiteralControl)
						LiteralContent += ((LiteralControl)CurrentControl).Text;
					else
						throw new Exception("Only controls of type Literal allowed");

				TransformDocument.InnerXml = string.Format(xSLTemplate, LiteralContent, this.TemplateMatch);
			}
			
			// XSL Transform doc
			XslTransform ContentTransform = new XslTransform();
			// Create an XML Resolver
			XmlResolver ResolverDocument = new XmlUrlResolver();
			
			// Load XSLT
			ContentTransform.Load(TransformDocument, ResolverDocument, this.GetType().Assembly.Evidence);
			// Transform and write out to a string writer
			StringWriter TransformedDocument = new StringWriter();
			ContentTransform.Transform(ContentDocument, null, TransformedDocument, ResolverDocument);			
			ContentDocument.InnerXml = TransformedDocument.ToString();						
			
			writer.Write(ContentDocument.DocumentElement.InnerXml);

			#endregion
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -