zoukankan      html  css  js  c++  java
  • 遍历指定文件夹下所有的xml文件并动态生成HTML页面!

    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.IO;
    using System.Xml;
    using System.Net;
    using System.Text;
    using System.Text.RegularExpressions;


    namespace AspNet
    {
        /// <summary>
        /// 遍历指定文件夹下所有的Data.xml文件并动态生成HTML静态页面!
        /// 运行过程:[1调用2,2调用3,3调用4]
        /// </summary>
        public class GetPageHtml : System.Web.UI.Page
        {
            protected System.Web.UI.WebControls.Button WebClientButton;
            protected System.Web.UI.WebControls.TextBox ContentHtml;
            protected System.Web.UI.WebControls.Button GetText;
            protected System.Web.UI.WebControls.TextBox UrlText;
            protected System.Web.UI.WebControls.Button Button2;
            protected System.Web.UI.HtmlControls.HtmlInputFile FilePath;
            private string PageUrl = "";

            private void Page_Load(object sender, System.EventArgs e)
            {
            }

            #region Web Form Designer generated code
            override protected void OnInit(EventArgs e)
            {
                InitializeComponent();
                base.OnInit(e);
            }

            /// <summary>
            /// 设计器支持所需的方法 - 不要使用代码编辑器修改
            /// 此方法的内容。
            /// </summary>
            private void InitializeComponent()
            {   
                this.WebClientButton.Click += new System.EventHandler(this.WebClientButton_Click);
                this.Button2.Click += new System.EventHandler(this.Button2_Click);
                this.Load += new System.EventHandler(this.Page_Load);

            }
            #endregion

            /// <summary>
            /// 获取HTML代码
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void WebClientButton_Click(object sender, System.EventArgs e)
            {
     
                PageUrl = UrlText.Text.Trim();
                WebClient wc = new WebClient();
                wc.Credentials = CredentialCache.DefaultCredentials;
               
                Byte[] pageData = wc.DownloadData(PageUrl);
                ContentHtml.Text = Encoding.Default.GetString(pageData);    
                wc.Dispose(); 
            }


     
            /// <summary>
            /// 方法1:调用方法2 BianLi 去遍历文件
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void Button2_Click(object sender, System.EventArgs e)
            {
                           
                string Dir=FilePath.Value.Trim();
                string str="";

                if (Dir=="")
                {
                    Response.Write("<script>alert('请选择要生成页面的文件夹好不好,老大!')</script>");
                    return;
                }
                else
                {            

                    //Response.Write(Dir.Replace(Dir.Remove(0,Dir.LastIndexOf(@"\")),"")+@"\");
                    str=Dir.Replace(Dir.Remove(0,Dir.LastIndexOf(@"\")),"")+@"\";
                    //调用遍历文件夹的方法BianLi(path)
                    BianLi(str);
                    Response.Write("<script>alert('所有HTML静态页面已经生成完毕!')</script>"); 
                }

            }
            /// <summary>
            /// 方法2:遍历出指定文件夹下的所有文件,并调用方法3:ReadXmlData(Dir)读取XML数据
            /// </summary>
            /// <param name="path"></param>
            private void BianLi(string path)
            {
                string[] fileNames = Directory.GetFiles(path);
                string[] directories = Directory.GetDirectories(path);
                string Dir="";

                foreach (string file in fileNames)
                {
                         //如果路径信息中包含Data.xml文件则输出有用的路径
                         if(file.Remove(0,file.LastIndexOf(@"\")).Replace(@"\","")=="Data.xml")   
                         
                            Dir=file.Remove(0,file.IndexOf(@"car\")).Replace("Data.xml","").Replace(@"\GetPageHtml\","").Replace(@"\",@"/").Trim();

                          //调用ReadXmlData方法去读取Data.xml信息^_^
                          if(Dir!="")  ReadXmlData(Dir);
                          //Response.Write(Dir+"<br>");    
                         
                }

                foreach (string dir in directories)
                {
                    //再次遍历
                    BianLi(dir);

                }
            }

             
            /// <summary>
            /// 方法3:ReadXmlData,读取xml信息,调用方法4去生成HTML页面
            /// </summary>
            private void ReadXmlData(string filepath)
            {
                string FileName = Server.MapPath(@filepath+"Data.xml");

                if ( ! System.IO.File.Exists(FileName))
                {
                    // 输出文件不存在错误信息
                    Response.Write("抱歉,Data.xml文件不存在");
                    return;
                }
      
                XmlDocument doc = new XmlDocument();

                try
                {

                    doc.Load(FileName);   
                    //输出指定的一个结点:
                    //XmlNode node = doc.SelectSingleNode("//main[@id='1']");
                    //输出所有的结点^_^
                    XmlNode node = doc.SelectSingleNode("//Root");
                    if (node != null)
                    { 
                        int i=0;
                        int j=1;
                        string str="";
                        foreach (XmlElement E in node.ChildNodes)
                        {
                            foreach (XmlElement F in E.ChildNodes)
                            {
                          
                                //先用_组合字符
                                str=str+F.OuterXml+"_"; 
                                str=str.Trim();
                                i=i+1;
                                if(i %  3==0)
                                {
                                                           
                                    string delimStr = "_";
                                    char [] delimiter = delimStr.ToCharArray();
                                    string [] split =str.Split(delimiter);                           
                                    //利用撤分的变量来调用生成静态页面的方法:
                                    CreateHtml(j,split[0],split[1],split[2],@filepath);
            if (i==1) Response.Write(@filepath+"<br>");
                                    str="";                                
                                    j=j+1;
                           
                                }

                            }    
                        }
                  
                    }
                }

                catch
                {
                    // 输出错误信息:xml格式不正确
                   // Response.Write("Data.xml格式不正确");
                   // Response.Write("错误文件路径信息:"+@filepath+"<br>");
                    return;
                }

                         
            }


                 
            /// <summary>
            ///  方法4:CreateHtml,根据读取的xml信息循环生成HTM静态页面
            /// </summary>
            /// <param name="id"></param>
            /// <param name="Car_Jpg"></param>
            /// <param name="Car_Title"></param>
            /// <param name="Car_Content"></param>
            private void CreateHtml(int id,string Car_Jpg,string Car_Title,string Car_Content,string filepath )
            {
                //定义HTML模板
                string content = ContentHtml.Text;  
                //定义生成的HTM文件名
                string FileName = @filepath+id + ".htm";

                //判断ID.HTM是否存在^_^,存在立即删除
                if (File.Exists(Server.MapPath(".") + Path.DirectorySeparatorChar +FileName))           
                    File.Delete(Server.MapPath(".") + Path.DirectorySeparatorChar +FileName);

                FileStream fs = new FileStream(Server.MapPath(".") + Path.DirectorySeparatorChar + FileName, FileMode.CreateNew, FileAccess.Write, FileShare.None);
                StreamWriter sr = new StreamWriter(fs,System.Text.Encoding.GetEncoding("Gb2312"));           
             
                //替换图片
                content = content.Replace("Car_Jpg",Car_Jpg);
                //替换标题
                content = content.Replace("Car_Title",Car_Title);
                //替换内容
                content = content.Replace("Car_Content",Car_Content);
                //替换内容
                content = content.Replace("Car_ID",id.ToString());
                //替换HTM代码中的多余字符:<sub></sub>
                content = content.Replace("<sub>","");
                content = content.Replace("</sub>","");
               
                //到这里才生成HTML静态页面^_^,不过挺舒服的拉^_^
                sr.WriteLine(content);
                sr.Close();
                sr = null;
         
            }

           
                  
        }


      }

    +++++++++++++++++++++++++Data.xml
    <?xml version="1.0" encoding="GB2312" ?>
    <Root>
    <main>
    <sub>1.jpg</sub>
    <sub>title</sub>
    <sub>content</sub>
    </main>

    <main>
    <sub>2.jpg</sub>
    <sub>title</sub>
    <sub>content</sub>
    </main>
    </Root>

  • 相关阅读:
    SettingWithCopyWarning
    统计运算
    数据清洗
    dataframe 索引
    那些拯救我的快捷键
    如何拒绝那些哭天抢地向你求救结果把你坑了的同事?
    Linux 笔记
    数据可视化:桑基图
    敏捷
    持续集成的概念
  • 原文地址:https://www.cnblogs.com/cuihongyu3503319/p/607770.html
Copyright © 2011-2022 走看看