Go homepage(回首页) Upload pictures (上传图片) Write articles (发文字帖)
All articles(文章集合)All Picture(图片集合)All Video(视频集合)
The author:(作者)delvpublished in(发表于) 2014/1/24 9:07:18 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方法 }}