遍曆指定檔案夾下所有的xml檔案並動態產生HTML頁面!

來源:互聯網
上載者:User
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>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.