遍历指定文件夹下所有的xml文件并动态生成HTML页面
++++++++++++++++++++++++++++
功能:遍历指定文件夹下所有的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("错误文件路径信息:">"); 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> 本文出自 51CTO.COM技术博客<sub>2.jpg</sub> <sub>title</sub> <sub>content</sub> </main> </Root> +++++++++++++++++++++++++++++ |


gzycm520
博客统计信息
热门文章
最新评论
友情链接

