zoukankan      html  css  js  c++  java
  • ASP.NET中动态生成Xml格式文档,并转换为HTML文件

    作者: Maco  
    该文章转载自网络大本营

    程序实现功能:

    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<depth)
                {
                    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("<script>alert('请先点击获取内容');</script>");
                return;

            }
            Session["xmlTextBoxContent"] = TextBoxContent.Text;
          
          
            Response.Write("<script>window.open('PreExploerXMLMenu.aspx')</script>");
         
        }

    //'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("<table border=1>");
            
                //XML读取器找到”NAME“的标记元素
                xmlReader.ReadToFollowing("NAME");
                do{
                    if (i == 1) temp.Append("<tr>");
                    temp.Append("<td>");

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


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

            }//结束ProcessXML方法
        }
    }

  • 相关阅读:
    使用Visual C++进行串口通信编程
    预处理器进行调试
    怎样用C#实现完整文档打印功能
    如何能练就成一个卓越的程序员
    C# 实现Epson热敏打印机打印 Pos机用
    HARD HARD STUDY
    同步文本框内容的JS代码
    导出Excel之判断电脑中office的版本
    js设置IE检查所存网页的较新版本之‘每次访问此页时检查’
    批量更新sql表某字段范围内的随机数
  • 原文地址:https://www.cnblogs.com/Godblessyou/p/1779220.html
Copyright © 2011-2022 走看看