第10章-基于XML的论坛开发_第1页
第10章-基于XML的论坛开发_第2页
第10章-基于XML的论坛开发_第3页
第10章-基于XML的论坛开发_第4页
第10章-基于XML的论坛开发_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1页第10章基于XML的论坛开发本章概述本章的学习目标主要内容第2页本章概述XML在数据存储、数据交换、Web集成与配置等方面发挥着越来越重要的作用。本章通过一个实例——基于XML的论坛系统的设计与开发,介绍基于XML的Web应用程序开发技术。通过本章的学习,读者能对前面介绍的多种XML的相关技术有更深入的了解第3页本章的学习目标理解XML在Web应用程序开发中的作用学习论坛的系统设计及功能设计理解基于XML的论坛系统中的XML文档结构及内容掌握在.NET平台下基于XML的论坛系统的开发与实现方法第4页主要内容10.1系统功能分析

10.2论坛系统XML文件的设计10.3访问XML数据的公共类10.4帖子相关模块的设计与实现10.5用户信息模块的设计与实现10.6管理模块的设计与实现10.7本章小结第5页10.1系统功能分析论坛是一种Internet上的电子信息效劳系统是一个有多人参加的讨论系统人们可以在论坛的某个讨论区对某个共同感兴趣的问题进行讨论,自由发表自己的观点、回复他人问题并能直接与他人进行沟通论坛具有强大的实时交互功能本章实现一个.NET平台下基于XML的小型论坛它具有一般论坛的核心功能没有采用论坛的实际构建方式,以XML文档代替HTML文件、以XML文档代替数据库存储数据第6页论坛功能第7页系统模块本章的论坛系统可分为三大模块:用户信息模块:包括用户的登录、注册、会员信息修改及查询等帖子相关模块:会员登录后可发表帖子、浏览帖子及回复帖子后台管理模块:管理员登录后可以进行包括会员、帖子、论坛信息、版面等的管理第8页主要内容10.1系统功能分析10.2论坛系统XML文件的设计10.3访问XML数据的公共类10.4帖子相关模块的设计与实现10.5用户信息模块的设计与实现10.6管理模块的设计与实现10.7本章小结第9页10.2论坛系统XML文件的设计本章论坛采用XML文件存储所有数据。users.xmlsection.xmltopic.xmlreply.xml第10页users.xml<?xmlversion="1.0"encoding="GB2312"?><userlistxmlns:xsi=":///2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="users.xsd"><userrole_id="admin"><id>0</id><name>adfh</name><nickname>阿池</nickname><password>asdj1009dhsdf</password><email>123456789@qq</email><reg_time>2023-08-01</reg_time><sex>男</sex><headimg>head.jpg</headimg><login_time>2023-08-08</login_time><address>北京市</address></user>

</userlist>第11页section.xml<?xmlversion="1.0"encoding="GB2312"?><sectionlistxmlns:xsi=":///2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="section.xsd"><sectionsname="社区效劳"><id>1</id><description>通告及建议</description><topics>7</topics></section>

</sectionlist>第12页topic.xml<?xmlversion="1.0"encoding="GB2312"?><topiclistxmlns:xsi=":///2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="topic.xsd"><topicsection="1"><tid>20230804-094610-00000</tid><title>任命adfh为旅游休闲版主</title><content>根据本人申请,管理组审核通过,现任命adfh为旅游休闲斑竹,即日生效。特此通告</content><t_userid>0</t_userid><posttime>2023-08-0409:46:10</posttime><replynum>0</replynum><clicknum>0</clicknum><lasttime>2023-08-0409:46:10</lasttime></topic>……</topiclist>第13页reply.xml<?xmlversion="1.0"encoding="GB2312"?><replylistxmlns:xsi=":///2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="reply.xsd"><replytopic_id="20230806-202334-00001"><content>每年11至翌年4月是普吉岛的旅游旺季。确定时间后,先通过亚航预定打折机票,也可以在网上购置打包自由行套餐。</content><t_userid>0</t_userid><replytime>2023-08-0711:34:30</replytime></reply></replylist>第14页主要内容10.1系统功能分析10.2论坛系统XML文件的设计10.3访问XML数据的公共类10.4帖子相关模块的设计与实现10.5用户信息模块的设计与实现10.6管理模块的设计与实现10.7本章小结第15页10.3访问XML数据的公共类数据访问类主要实现对数据的增、删、改、查等功能。本论坛的系统配置以及对版块、帖子、回复、用户等数据进行访问的公共类均定义在命名空间forum.xml中使用各公共类的页面必须在页面开头使用usingforum.xml语句引用该命名空间。第16页系统配置中关于XML文档的定义<appSettings><addkey="userfile"value="App_Data\users.xml"/><addkey="userxsdfile"value="App_Data\users.xsd"/><addkey="tpcfile"value="App_Data\topic.xml"/><addkey="tpcxsdfile"value="App_Data\topic.xsd"/><addkey="secfile"value="App_Data\section.xml"/><addkey="secxsdfile"value="App_Data\section.xsd"/><addkey="replyfile"value="App_Data\reply.xml"/><addkey="replyxsdfile"value="App_Data\reply.xsd"/></appSettings>第17页公共类CommonStringpublicstaticclassCommonString{publicstaticstringstrBasePath=System.AppDomain.CurrentDomain.BaseDirectory;//论坛基路径

publicconststringstrHeadUrl="\\headimages\\";//头像文件存放位置

publicstaticstringstrUserFile=strBasePath+ConfigurationManager.AppSettings["userfile"];publicstaticstringstrUserXsdFile=strBasePath+ConfigurationManager.AppSettings["userxsdfile"];publicstaticstringstrTpcFile=strBasePath+ConfigurationManager.AppSettings["tpcfile"]; publicstaticstringstrTpcXsdFile=strBasePath+ConfigurationManager.AppSettings["tpcxsdfile"];publicstaticstringstrSecFile=strBasePath+ConfigurationManager.AppSettings["secfile"];publicstaticstringstrSecXsdFile=strBasePath+ConfigurationManager.AppSettings["secxsdfile"];publicstaticstringstrReplyFile=strBasePath+ConfigurationManager.AppSettings["replyfile"];publicstaticstringstrReplyXsdFile=strBasePath+ConfigurationManager.AppSettings["replyxsdfile"];publicstaticintOK=1;publicstaticintERROR=0;}第18页公共类XMLOperpublicclassXMLOper{ publicstaticDataTabledr2dt(DataRow[]drs){//把记录行集转换为DataTable对象返回if(drs==null||drs.Length==0)returnnull;DataTabledt=drs[0].Table.Clone();//创立同结构的DataTable表foreach(DataRowdrindrs)dt.ImportRow(dr);returndt;}}第19页用户信息访问类公共类user_XML定义了对用户信息〔保存在user.xml中〕的各种操作用户注册会员登录会员修改密码会员修改注册信息会员管理自己的帖子及回复第20页版块信息访问类公共类section_XML定义了对论坛版块信息〔保存在section.xml中〕的各种操作版块的添加版块的删除版块信息的修改版块下帖子的移动第21页帖子信息访问类公共类topic_XML定义了对论坛帖子信息〔保存在topic.xml中〕的各种操作帖子的添加或删除帖子信息的修改〔如更新帖子的点击数、回复数及最后回复时间等〕帖子的查询帖子的移动第22页回复信息访问类公共类reply_XML定义了对帖子回复信息〔保存在reply.xml中〕的各种操作回复的添加回复的删除指定会员的回复检索第23页主要内容10.1系统功能分析10.2论坛系统XML文件的设计10.3访问XML数据的公共类10.4帖子相关模块的设计与实现10.5用户信息模块的设计与实现10.6管理模块的设计与实现10.7本章小结第24页10.4帖子相关模块的设计与实现帖子相关模块的功能主要包括浏览帖子浏览回复登录会员发表新帖登录会员回复旧帖第25页帖子的浏览〔Default.aspx及其cs文件〕GridView控件GridView1TreeView控件TreeView1第26页帖子浏览的主要后台代码文件的结构框架usingSystem;usingSystem.Collections.Generic;usingSystem.Data;usingSystem.Web;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;usingforum.xml;

public{privateDataTabledt;//GridView1的数据源privateDataTabledtSec;……//各种方法的定义}第27页帖子浏览的主要后台代码页面初始化——Page类的Init事件protectedvoidPage_Init(objectsender,EventArgse){dt=topic_XML.ListTopic();//首次加载该页面,生成完整的帖子信息列表dtSec=section_XML.ListSec();//生成完整的版块信息列表//为登录用户发布新帖模块的下拉列表控件ddlSection绑定数据源ddlSection.DataSource=dtSec.DefaultView;ddlSection.DataTextField="sname";ddlSection.DataValueField="id";ddlSection.DataBind();}第28页帖子浏览的主要后台代码页面加载——Page类的Load事件protectedvoidPage_Load(objectsender,EventArgse){if(!IsPostBack)//判断当前加载的页面是否是回送页面,假设不是,那么执行下面语句{……//生成页面左侧树状目录导航区string[]s=section_XML.GetTpcName();

if(s!=null){……}//用版块名称生成TreeView控件的各节点if(Session[“userinfo〞]!=null){……}//假设是登录用户,树状目录显示“我的信息〞ddlSection.SelectedIndex=0;}

ddlSection.DataValueField="id";if(Session["tree"]==null||Session["tree"]=="0"){ Session["tree"]="0";//"首页";GridView1.DataSource=dt.DefaultView;}第29页帖子浏览的主要后台代码页面加载——Page类的Load事件续上页:else{DataTabledt1=topic_XML.ListTopic(Session["tree"].ToString());GridView1.DataSource=dt1.DefaultView;//设置数据源}

GridView1.DataBind();//绑定数据源title_control();//帖子标题字数控制

if(Session["userinfo"]!=null){//如果当前用户已登录,那么设置发布新帖模块下的几个控件均为“可用〞状态txtContent.Enabled=true; …… Label3.Text="您现在可以在此发表新帖!";}}//Page_Load第30页帖子浏览的主要后台代码TreeView1的SelectedNodeChanged事件protectedvoidTreeView1_SelectedNodeChanged(objectsender,EventArgse){TreeNodetn=newTreeNode();tn=TreeView1.SelectedNode;//获取选择的节点if(tn.ChildNodes.Count==0)//无子节点{if(tn.Text=="首页") GridView1.DataSource=dt.DefaultView;Session["tree"]="0";elseif(tn.Text=="我的信息"){Response.Write("<script>window.open(\"Userinfo.aspx\",\"_blank\")</script>");this.TreeView1.SelectedNode.Selected=false;}

第31页帖子浏览的主要后台代码TreeView1的SelectedNodeChanged事件续上页:else{//根据版块检索其下的帖子inti=0;for(;i<dtSec.Rows.Count&&tn.Text!=dtSec.Rows[i]["sname"].ToString();i++);DataTabledt1=topic_XML.ListTopic(dtSec.Rows[i]["id"].ToString());GridView1.DataSource=dt1.DefaultView;Session["tree"]=dtSec.Rows[i]["id"].ToString();}GridView1.DataBind();//重新绑定更新了的数据源title_control();}else{GridView1.DataSource=dt.DefaultView;Session["tree"]="0";}}//TreeView1_SelectedNodeChanged第32页特定帖子回复的浏览〔list.aspx及其cs文件〕Repeater控件Repeater1Literal控件Literal1第33页特定帖子回复浏览的主要后台代码文件的_list类结构框架

{privatestringtid;……//控件事件的响应函数的定义}//_list类定义结束第34页特定帖子回复浏览的主要后台代码页面加载——Page类的Load事件protectedvoidPage_Load(objectsender,EventArgse){tid=Request.QueryString["tid"];topic_XML.UpdateTopicClick(tid);//该帖的点击数加1……//获取特定编号的帖子的详细信息并显示//获取发帖人信息并显示

stringuserid=tnode.SelectSingleNode("t_userid").InnerText;str="userlist/user[id='"+userid+"']";tnode=user_XML.ExecuteSql(str);……//获取指定帖子的所有回复

str="topic_id='"+tid+"'";DataRow[]dr=reply_xml.Query(str);DataTabledt=XMLOper.dr2dt(dr);第35页特定帖子回复浏览的主要后台代码页面加载——Page类的Load事件续上页:if(dt!=null){dt.Columns.Add("name",typeof(string));……//参加更多列的信息XmlDocumentindexXml=newXmlDocument();//加载XML文档indexXml.Load(CommonString.strUserFile);for(inti=0;i<dt.Rows.Count;i++){str="userlist/user[id="+dt.Rows[i]["t_userid"]+"]";XmlNodenode=indexXml.SelectSingleNode(str);dt.Rows[i]["name"]=node.SelectSingleNode("name").InnerText;……}//对每个回复,得到回复人的信息,并在回复表中添加用户信息相关列第36页特定帖子回复浏览的主要后台代码页面加载——Page类的Load事件续上页:Repeater1.DataSource=dt;//设置Repeater1的数据源Repeater1.DataBind();//绑定Repeater1的数据源}//ifif(Session["userinfo"]!=null){//如果浏览者是已登录用户,那么他可进行回复,设置页面上用于回复的文本框及提交按//钮/控件为“可用〞状态TextBox1.Enabled=true;btnReply.Enabled=true;}}//Page_Load第37页已登录用户发表新帖DropDownList控件ddlSection2个TextBox控件txtTopic和txtContent第38页已登录用户发表新帖的主要后台代码“提交〞按钮的Click事件protectedvoidbtnPost_Click(objectsender,EventArgse){if(txtContent.Text==""||txtTopic.Text=="") Label2.Visible=true;//标题或内容不能为空else{Label2.Visible=false;User_Sessionus=(User_Session)Session["userinfo"];stringindex=ddlSection.SelectedValue;第39页已登录用户发表新帖的主要后台代码“提交〞按钮的Click事件续上页://在topic.xml中添加一个帖子元素topic_XML.InsertTopic(txtTopic.Text,txtContent.Text,us.UserID,index);

txtContent.Text="";txtTopic.Text="";if(Session[“tree〞]==“首页〞)dt=topic_XML.ListTopic();elsedt=topic_XML.ListTopic(Convert.ToString(index));GridView1.DataSource=dt.DefaultView;GridView1.DataBind();//重新绑定数据源,更新帖子浏览页面显示}}//btnPost_Click第40页已登录用户发表新帖的主要后台代码“取消〞按钮的Click事件protectedvoidbtnCancel_Click(objectsender,EventArgse){txtContent.Text="";txtTopic.Text="";}第41页已登录用户回复旧帖Button控件btnReplyTextBox控件TextBox1第42页已登录用户回复旧帖的主要后台代码“回复〞按钮的Click事件protectedvoidbtnReply_Click(objectsender,EventArgse){if(TextBox1.Text=="")Label3.Visible=true;//回复内容不为空else{User_Sessionus=(User_Session)Session["userinfo"];reply_xml.InsertReply(tid,TextBox1.Text,us.UserID);Response.Redirect(“~/list.aspx?tid=〞+tid);//重定位到当前页面}}//btnReply_Click第43页主要内容1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论