ASP.NET中动态生成Xml格式文档,并转换为HTML文件_[Asp.Net教程]
					程序实现功能:
1.读取数据,点解“获取”按钮动态生成XML格式的文档,并把生成的文档放在TEXTBOX或者生成一个XML文件。
2.点击“浏览”按钮,把获取到的XML格式文档,转换成HTML,在浏览器中显示。
首先在ASPX对应的CS文件中引入using System.Xml;
 int m = 0; int loop = 0;
//根据指定的获取深度DEPTH获取用于生成XML文档的数据
 private int initData(string[] parent, string[] guid, string[] path, string[] name, ChannelCollection cc,int depth)
 {
 
 
 foreach (Channel channel in cc)
 {
 
 parent[m] = channel.Parent.Guid;
 guid[m] = channel.Guid;
 path[m] = channel.Path;
 name[m] = channel.Name;
 m = m + 1;
 if (channel.Channels.Count!=0 &&loop {
 ChannelCollection c = channel.Channels;
 ++loop;
 initData( parent, guid, path, name, c,depth);
 }
 
 }
 return m;
 } 
 //点击“获取XML内容“按钮执行的事件
 protected void ButtonGetXml_Click(object sender, EventArgs e)
 {
 ChannelCollection cc = selectedChannel.Channels;
 string[] parent =new string[1000];
 string[] guid = new string[1000];
 string[] path = new string[1000];
 string[] style = new string[1000];
 string[] name = new string[1000];
 int i=0;
 int depth = int.Parse( DropDownListGetDepth.SelectedValue);
 //根据指定的获取深度DEPTH获取用于生成XML文档的数据
 i=initData(parent, guid, path, name, cc,depth);
 //创建XML 文档对象
 document = new XmlDocument();
 //创建XML节点元素
 XmlElement channelsElement = document.CreateElement("Channels");
 document.AppendChild(channelsElement);
 for (int k = 1; k <=i; k++)
 {
 channelsElement.AppendChild(document.CreateElement("CHANNEL"));
 }
 //根据元素节点名获取元素节点
 XmlNodeList nodelist = document.GetElementsByTagName("CHANNEL");
 int size = nodelist.Count;
 for (int k = 0; k < size; k++)
 {
 XmlNode node = nodelist.Item(k);
 
 XmlElement elementNode = (XmlElement)node;
 //elementNode.SetAttribute("guid",guid[k]);设置元素属性
 elementNode.AppendChild(document.CreateElement("PARENT"));
 elementNode.AppendChild(document.CreateElement("GUID"));
 elementNode.AppendChild(document.CreateElement("PATH"));
 elementNode.AppendChild(document.CreateElement("NAME"));
 }
 XmlNodeList nodelistParent = document.GetElementsByTagName("PARENT");
 int sizeParent = nodelistParent.Count;
 for (int k = 0; k < sizeParent; k++)
 {
 XmlNode node = nodelistParent.Item(k);
 
 XmlElement elementNode = (XmlElement)node;
 //用初始化后的数据生成对应元素节点的文本节点
 elementNode.AppendChild(document.CreateTextNode(parent[k]));
 
 }
 XmlNodeList nodelistGuid = document.GetElementsByTagName("GUID");
 int sizeGuid = nodelistGuid.Count;
 for (int k = 0; k < sizeGuid; k++)
 {
 XmlNode node = nodelistGuid.Item(k);
 
 XmlElement elementNode = (XmlElement)node;
 elementNode.AppendChild(document.CreateTextNode(guid[k]));
 }
 XmlNodeList nodelistPath = document.GetElementsByTagName("PATH");
 int sizePath = nodelistPath.Count;
 for (int k = 0; k < sizePath; k++)
 {
 XmlNode node = nodelistPath.Item(k);
 
 XmlElement elementNode = (XmlElement)node;
 elementNode.AppendChild(document.CreateTextNode(path[k]));
 }
 XmlNodeList nodelistName = document.GetElementsByTagName("NAME");
 int sizeName = nodelistName.Count;
 for (int k = 0; k < sizeName; k++)
 {
 XmlNode node = nodelistName.Item(k);
 
 XmlElement elementNode = (XmlElement)node;
 elementNode.AppendChild(document.CreateTextNode(name[k]));
 }
 // document.Save("/icbc/newxml.xml");//可以保存为XML文件,位置在C:/icbc/newxml.xml
 //创建用于保存内容的字符串里
 StringBuilder sb = new StringBuilder();
 //输出流指向字符串
 XmlWriter writer= XmlWriter.Create(sb); 
 //XML文档把内容写到字符串里
 document.WriteContentTo(writer);
 
 writer.Flush();
 //让页面中的文本框显示XML文档内容
 TextBoxContent.Text=sb.ToString() ;
 
 }
//点击”预览“按钮,转到XML生成HTML的页面
 protected void ButtonYuLAN_Click(object sender, EventArgs e)
 {
 //XmlDocument xml = new XmlDocument();
 if (TextBoxContent.Text == null || TextBoxContent.Text == "")
 {
 Response.Write("");
 return;
 }
 Session["xmlTextBoxContent"] = TextBoxContent.Text;
 
 
 Response.Write("");
 
 }
//'PreExploerXMLMenu.aspx.CS的内容如下
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml;
using System.IO;
using System.Text;
public partial class Module_ChannelInfoManage_PreExploerXMLMenu : System.Web.UI.Page
{
 protected void Page_Load(object sender, EventArgs e)
 {
 //创建XmlDisplay类的实例
 XmlDisplay XmlDisplayDemo = new XmlDisplay();
 //得到XML内容,申明为字符串用于生成 StringReader
 string xmlcontent=(string )Session["xmlTextBoxContent"];
 
 //生成在网页上保留静态文本的位置
 Literal LT = new Literal();
 LT.Text = XmlDisplayDemo.LoadDocument(new StringReader(xmlcontent));
 this.Panel1.Controls.Add(LT);
 }
 //这个类读入并处理XML文件
 public class XmlDisplay
 {
 public string LoadDocument(StringReader sr)
 {
 XmlReader xmlReader = null;
 
 StringBuilder html = new StringBuilder();
 try
 {
 //创建XMLTextReader的实例。
 
 xmlReader = XmlReader.Create(sr); 
 //处理XML文件
 html.Append(ProcessXml(xmlReader));
 }
 catch (XmlException ex)
 {
 html.Append("发生一个XML异常:" + ex.ToString());
 }
 catch (Exception ex)
 {
 html.Append("发生一个普通异常:" + ex.ToString());
 }
 finally
 {
 if (xmlReader != null)
 xmlReader.Close();
 }
 return html.ToString();
 }
 //处理XML数据的方法,用于控制生成HTML文件的格式
 private string ProcessXml(XmlReader xmlReader)
 {
 StringBuilder temp = new StringBuilder();
 int i = 1;
 temp.Append("
");
 
 //XML读取器找到”NAME“的标记元素
 xmlReader.ReadToFollowing("NAME");
 do{
 if (i == 1) temp.Append("
");
 temp.Append("
");
 //xml读取器的位置向前移动,指到 文本元素内容
 xmlReader.Read();
 //读取文本元素内容到字符串中 
 temp.Append(xmlReader.Value);
 temp.Append("
");
 //一行显示10列数据
 if ((i%10==0)) temp.Append("
");
 i++;
 } while (xmlReader.ReadToFollowing("NAME"));
 temp.Append("
");
 return temp.ToString();
 }//结束ProcessXML方法
 }
}
来源:
aaronbai的blog