当前位置:首页 > ASP.NET中动态生成Xml格式文档,并转换为HTML文件

ASP.NET中动态生成Xml格式文档,并转换为HTML文件

点击次数:1092  更新日期:2010-12-28
\n

程序实现功能:


\n

1.读取数据,点解“获取”按钮动态生成XML格式的文档,并把生成的文档放在TEXTBOX或者生成一个XML文件。


\n

2.点击“浏览”按钮,把获取到的XML格式文档,转换成HTML,在浏览器中显示。

\n

首先在ASPX对应的CS文件中引入using System.Xml;


\n

int m = 0; int loop = 0;


\n

//根据指定的获取深度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<depth)
{
ChannelCollection c = channel.Channels;


\n

++loop;
initData( parent, guid, path, name, c,depth);


\n

}

}
return m;
}


\n

//点击“获取XML内容“按钮执行的事件
protected void ButtonGetXml_Click(object sender, EventArgs e)
{


\n

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;


\n

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);


\n

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”));
}


\n

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]));

}


\n

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]));


\n

}
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]));


\n

}
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]));


\n

}


\n

// 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() ;


\n


}


\n

//点击”预览“按钮,转到XML生成HTML的页面
protected void ButtonYuLAN_Click(object sender, EventArgs e)
{
//XmlDocument xml = new XmlDocument();


\n

if (TextBoxContent.Text == null || TextBoxContent.Text == “”)
{
Response.Write(“<script>alert(‘请先点击获取内容’);</script>”);
return;


\n

}
Session["xmlTextBoxContent"] = TextBoxContent.Text;


Response.Write(“<script>window.open(‘PreExploerXMLMenu.aspx’)</script>”);

}


\n

//’PreExploerXMLMenu.aspx.CS的内容如下


\n

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;


\n

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);
}


\n

//这个类读入并处理XML文件
public class XmlDisplay


\n

{


\n

public string LoadDocument(StringReader sr)
{
XmlReader xmlReader = null;

StringBuilder html = new StringBuilder();
try
{
//创建XMLTextReader的实例。


\n


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();
}


\n

//处理XML数据的方法,用于控制生成HTML文件的格式
private string ProcessXml(XmlReader xmlReader)
{
StringBuilder temp = new StringBuilder();
int i = 1;
temp.Append(“<table border=1>”);

//XML读取器找到”NAME“的标记元素
xmlReader.ReadToFollowing(“NAME”);
do{
if (i == 1) temp.Append(“<tr>”);
temp.Append(“<td>”);


\n

//xml读取器的位置向前移动,指到 文本元素内容
xmlReader.Read();
//读取文本元素内容到字符串中
temp.Append(xmlReader.Value);
temp.Append(“</td>”);
//一行显示10列数据
if ((i%10==0)) temp.Append(“</tr><tr>”);
i++;
} while (xmlReader.ReadToFollowing(“NAME”));


\n


temp.Append(“</tr></table>”);
return temp.ToString();


\n

}//结束ProcessXML方法
}
}


来源:aaronbai的blog

\n