在asp.net(C#)中采用自定义标签和XML、XSL显示数据

  标签定义

  

复制代码 代码如下:

  public class Encoding

  {

  public string Encode(string cSource)

  {

  return System.Web.HttpUtility.HtmlEncode(cSource);

  }

  }

  public class EmList : Label

  {

  public override bool EnableViewState

  {

  get{ return false;}

  }

  public string XslFile{get;set;}

  public object SerialObject{get;set;}

  protected override void Render(HtmlTextWriter writer)

  {

  if (SerialObject == null)

  {

  throw new Exception("对象未初始化");

  }

  System.Xml.Serialization.XmlSerializer oSerial = new System.Xml.Serialization.XmlSerializer(SerialObject.GetType());

  System.Text.StringBuilder oSb = new System.Text.StringBuilder();

  System.IO.StringWriter oWr = new System.IO.StringWriter(oSb);

  string Xml = "";

  oSerial.Serialize(oWr, SerialObject);

  Xml =oSb.ToString();

  string cXslFileName = this.MapPathSecure(XslFile);

  if (!System.IO.File.Exists(cXslFileName))

  {

  throw new Exception("请加自己的处理异常程序");

  }

  System.Xml.Xsl.XsltArgumentList xslArgs = new System.Xml.Xsl.XsltArgumentList();

  Encoding oEn = new Encoding();

  xslArgs.AddExtensionObject("urn:Encoding", oEn);

  System.Xml.XmlDocument oDoc = new System.Xml.XmlDocument();

  try

  {

  oDoc.LoadXml(Xml);

  }

  catch

  {

  throw new Exception("请加自己的处理异常程序");

  }

  System.Xml.Xsl.XslCompiledTransform oTran = new System.Xml.Xsl.XslCompiledTransform();

  string cXsl = "";

  try

  {

  cXsl = System.IO.File.ReadAllText(cXslFileName);

  }

  catch

  {

  throw new Exception("请加自己的处理异常程序");

  }

  System.IO.StringReader oSr=new System.IO.StringReader(cXsl);

  System.Xml.XmlReader oRe=System.Xml.XmlReader.Create(oSr);

  try

  {

  oTran.Load(oRe);

  }

  catch

  {

  throw new Exception("请加自己的处理异常程序");

  }

  try

  {

  oTran.Transform(oDoc, xslArgs, writer);

  }

  catch

  {

  throw new Exception("请加自己的处理异常程序");

  }

  }

  }

  public class PageBar : System.Web.UI.HtmlControls.HtmlControl

  {

  public int PageNum{get;set;}

  public int PageSize { get; set; }

  public int PageCount { get; set; }

  public string BaseUrl{get;set;}

  protected override void Render(HtmlTextWriter writer)

  {

  writer.Write(string.Format("<a href={0}?PageNum=1>第一页</a>|<a href={0}?PageNum={1}>上一页</a>|<a href={0}?PageNum={2}>下一页</a>|<a href={0}?PageNum={3}>尾页</a>  (共{4}当前页{5})", BaseUrl, PageNum - 1 > 0 ? PageNum - 1 : 1, PageNum + 1 > PageCount ? PageCount : PageNum + 1, PageCount, PageCount, PageNum));

  }

  }

  页面定义

  

复制代码 代码如下:

  <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>

  <%@Register TagPrefix="CS" Namespace="WebApplication1.Control" Assembly=" WebApplication1" %>

  <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

  <html xmlns="http://www.w3.org/1999/xhtml" >

  <head runat="server">

  <title></title>

  </head>

  <body>

  <CS:EmList SerialObject="<%#List%>" XslFile="XSL/test.xslt" runat="server" /><br />

  <CS:PageBar PageNum="<%#PageNum%>" BaseUrl="<%#Request.Path%>" PageCount="5" runat="server" />

  </body>

  </html>

  其中List和PageNum为页面属性

  XSLT:

  

复制代码 代码如下:

  <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:Encoding="urn:Encoding">

  <xsl:output method="text" />

  <xsl:template match="/">

  <h2>

  <xsl:for-each select="ArrayOfEmployeeEntity/EmployeeEntity">

  <![CDATA[<a href="http://www.glzy8.com/article/9720.htm]]><xsl:value-of select="Encoding:Encode(EmployeeID)"/><![CDATA[" alt="]]><xsl:value-of select= "Encoding:Encode(Full_Name)"/><![CDATA["><br/>]]><xsl:value-of select= "Encoding:Encode(Email_Address)"/></xsl:for-each>

  </h2>

  </xsl:template>

  </xsl:stylesheet>