📄 xmltransformer.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 + -