• 【转】利用xml开发新闻发布系统(C#)


    制作一个XML新闻发布系统
    1、什么是XML:XML是ExtensibleMarkupLanguage的简写,一种扩展性标识语言,是一种简单的数据存储语言,使用一系列简单的标记描述数据,XML易于在任何应用程序中读写数据,这使XML很快成为数据交换的唯一公共语言。


    一个XML文件必须满足以下三项基本规则:

    (1)文档以XML定义开始。1.0表示其版本编号;
    (2)有一个包含所有其它内容的根元素,如下面例子中的xinwen标记符;
    (3)所有元素必须合理地嵌套,不允许交叉嵌套。交叉嵌套应用程序将拒绝处理文件。

    2、XML的结构范例:
    1:<?xml version="1.0" encoding="gb2312"?>
    2:<xinwen>
    3: <news>
    4:    <news_id>5</news_id>
    5:    <news_title>XML新闻发布系统</news_title>
    6:    <news_author>李明阳</news_author>
    7:    <news_ly>原创</news_ly>
    8:    <news_content>XML新闻发布系统测试成功</news_content>
    9:    <news_adddate>2008-1-12 15:39:24</news_adddate>
    10: </news>
    11: <news>
    12:    <news_id>6</news_id>
    13:    <news_title>XML新闻发布系统</news_title>
    14:    <news_author>YD</news_author>
    15:    <news_ly>myself</news_ly>
    17:    <news_content>XML新闻发布系统</news_content>
    18:    <news_adddate>2008-1-12 15:39:44</news_adddate>
    19: </news>
    20:</xinwen>

    3、结构注释:
    1)第1行是指“XML文档声明”
    2)第2行表示的是一个根结点的开始标签,第20行是与之匹配的尾标签,一个XML文档有且只有一个根结点。
    3)第3行表示第一个子结点(或也叫元素)的开始标签,第10行表示一个与之匹配的尾标签,它是根结点的子项。同理,11-19为第二个子结点。
    4)第4行到第9行都表示为元素,也就是子结点内的子项,成对出现,元素同样采用双标签,中间为字符串值。

    4、几个重要的XML对象
    1)XmlDocument:用于声明XML文档         

    2)XmlNode:XML文档中的单个结点

    3)XmlElement:表示一个元素


    5、如何向一个XML文件内写入数据
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load(url); //加载XML文档          
                XmlNode root = xmlDoc.SelectSingleNode("xinwen");//选择匹配表达式的第一个结点
                XmlElement news = xmlDoc.CreateElement("news");//创建一个指定的元素
                string id;
                //创建第一个节点的第一个元素
                if (root.HasChildNodes)//获取一个值,该值表示节点是否有任何子结点,返回bool类型
                {
                 id = Convert.ToString(Convert.ToInt32(root.LastChild.FirstChild.InnerText) + 1);
                    //获取最后一个级中的第一个子级的子结点串联值,并加1
                }
                else
                {
                id="1";
                }
                //设置ID
                XmlElement id2 = xmlDoc.CreateElement("news_id");
                //创建第一个节点的第一个元素里的属性
                id2.InnerText = id;//设置文本节点
                news.AppendChild(id2);
                //设置标题
                XmlElement title = xmlDoc.CreateElement("news_title");
                //创建第一个节点的第一个元素里的属性
                title.InnerText = news_title;//设置文本节点
                news.AppendChild(title);//将指定节点添加到该节点的子节点列表的末尾
                xmlDoc.Save(url);//保存XML文件

    6、制作一个新闻添加页面
    1)先制作一个用于存储新闻数据的news.xml
    <?xml version="1.0" encoding="gb2312"?>
    <xinwen>

    </xinwen>
    2)新闻添加页面的制作:用于添加新闻内容的数据采集控件制作,添加一个写入按钮,一个管理新闻列表按钮
    双击写入按钮击发单击事件,书写如下代码:
    因为要对XML进行操作,并且要写入XML,所以先导入命名空间
    using System.Xml;
    using System.IO;

    protected void Button1_Click(object sender, EventArgs e)
        {
            string url = Server.MapPath("news.xml");//获取相对路下的news.xml文件
            string news_title = this.title.Text.ToString();
            string news_author = this.author.Text.ToString();
            string news_ly = this.ly.Text.ToString();
            string news_content = this.content.Text.ToString();
            string news_adddate = DateTime.Now.ToString();
            try
            {
                XmlDocument xmlDoc = new XmlDocument();
                xmlDoc.Load(url); //加载XML文档          
                XmlNode root = xmlDoc.SelectSingleNode("xinwen");//选择匹配表达式的第一个结点

                //查找第一个匹配的XmlNode
                XmlElement news = xmlDoc.CreateElement("news");//创建一个指定的元素
                string id;
                //创建第一个节点的第一个元素
                if (root.HasChildNodes)//获取一个值,该值表示节点是否有任何子结点,返回bool类型
                {
                 id = Convert.ToString(Convert.ToInt32(root.LastChild.FirstChild.InnerText) + 1);
                    //获取最后一个级中的第一个子级的子结点串联值,并加1
                }
                else
                {
                id="1";
                }
                //设置ID
                XmlElement id2 = xmlDoc.CreateElement("news_id");
                //创建第一个节点的第一个元素里的属性
                id2.InnerText = id;//设置文本节点
                news.AppendChild(id2);
                //设置标题
                XmlElement title = xmlDoc.CreateElement("news_title");
                //创建第一个节点的第一个元素里的属性
                title.InnerText = news_title;//设置文本节点
                news.AppendChild(title);//将指定节点添加到该节点的子节点列表的末尾
                //设置作者
                XmlElement author = xmlDoc.CreateElement("news_author");
                author.InnerText = news_author;
                news.AppendChild(author);
                //设置来源
                XmlElement ly = xmlDoc.CreateElement("news_ly");
                ly.InnerText = news_ly;
                news.AppendChild(ly);
                //设置内容
                XmlElement content = xmlDoc.CreateElement("news_content");
                content.InnerText = news_content;
                news.AppendChild(content);
                //设置时间
                XmlElement adddate = xmlDoc.CreateElement("news_adddate");
                adddate.InnerText = news_adddate;
                news.AppendChild(adddate);
                root.AppendChild(news);
                xmlDoc.Save(url);//保存XML文件

                Response.Redirect("add_news.aspx");
            }
            catch (Exception ex)
            {
                Response.Write(ex.ToString());
            }
        }


    双击查看管理新闻列表按钮击发按钮单击事件,录入如下代码:

    protected void Button2_Click(object sender, EventArgs e)
        {
            Response.Redirect("news_manage.aspx");
        }


    7、制作一个新闻管理列表页面news_manage.aspx
    因为要对XML进行操作,并且要写入XML,所以先导入命名空间
    using System.Xml;
    using System.IO;

    1)页面制作,添加GridView控件,手动设置列,包括两个超级链接列,用来做删除和修改页面的链接

    2)本页共有两个事件驱动需要添加代码,首先是页面载入事件时需要将XML文件内的数据读取绑定到GridView控件,然后是分页时的页面索引改变事件,代码一并书写
    代码如下:

    protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ReadXML();
            }
        }
        private void ReadXML()
        {
            string url = Server.MapPath("news.xml");//获得当前文件夹下的XML文件
            StreamReader sRead = new StreamReader(url, System.Text.Encoding.GetEncoding("GB2312"));
            //以一种特定的编码从字节流读取字符,必须要转化成GB2312读取才不能出乱码
            XmlDataDocument datadoc = new XmlDataDocument();//操作XML文档
            datadoc.DataSet.ReadXml(sRead);//将读取的字节流存到DataSet里面去
            this.GridView1.DataSource = datadoc.DataSet.Tables[0].DefaultView;
            this.GridView1.DataBind();
            datadoc = null;//清空对XML数据的操作
            sRead.Close();//关闭字节流的读取
        }
        protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            GridView1.PageIndex = e.NewPageIndex;
            ReadXML();
        }


    8、制作一个具体新闻内容查看页面:在管理页点击新闻标题直接查看新闻具体内容
    因为要对XML进行操作,并且要写入XML,所以先导入命名空间
    using System.Xml;
    using System.IO;

    1)页面设计:在前台直接放置几个标签控件,来接收新闻各字段

    2)该页在页面打开时间即查看新闻具体内容,所以应激活页面载入事件,书写如下代码:

    protected void Page_Load(object sender, EventArgs e)
        {
            string url = Server.MapPath("news.xml");
            string news_id = Request.QueryString["news_id"];
            if (news_id == "")
            {
                Response.Redirect("news_manage.aspx");
            }
            else
            {
               XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(url); //加载XML文档
            XmlNode root = xmlDoc.SelectSingleNode("xinwen/news[news_id ='" + news_id + "']");

            if (root != null)
            {
                title.Text = root.ChildNodes[1].InnerText;
                author.Text = root.ChildNodes[2].InnerText;
                ly.Text = root.ChildNodes[3].InnerText;
                content.Text = Server.HtmlEncode(root.ChildNodes[4].InnerText.ToString());
                adddate.Text = root.ChildNodes[5].InnerText;
            }
            }
        }

    9、制作新闻更新页面edit_news.aspx

    因为要对XML进行操作,并且要写入XML,所以先导入命名空间
    using System.Xml;
    using System.IO;


    1)新闻修改页面的制作:用于修改新闻内容的数据采集控件制作,添加一个修改按钮,一个管理新闻列表按钮
    因为修改页面是被管理页打开,所以应当根据管理页发过来的ID为条件直接将匹配的新闻内容在页面载入事件中读出,赋值给各数据采集控件,书写如下代码:

    protected void Page_Load(object sender, EventArgs e)
        {
            string url = Server.MapPath("news.xml");
            string news_id=Request.QueryString["news_id"];
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(url); //加载XML文档
            XmlNode root = xmlDoc.SelectSingleNode("xinwen/news[news_id ='"+news_id+"']");
             
            if (root!=null)  
            {
              title.Text=root.ChildNodes[1].InnerText;
              author.Text = root.ChildNodes[2].InnerText;
              ly.Text = root.ChildNodes[3].InnerText;
              content.Text = root.ChildNodes[4].InnerText;
        
            }
        }


    双击修改按钮的激活单击事件,书写代码如下:
    protected void Button1_Click(object sender, EventArgs e)
        {
            string url = Server.MapPath("news.xml");
            string news_id = Request.QueryString["news_id"];
            string title=Request.Form["title"];
            string author=Request.Form["author"];
            string ly=Request.Form["ly"];
            string content=Request.Form["content"];
            //获取行信息的索引字段news_id
             XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(url); //加载XML文件
            XmlNode root = xmlDoc.SelectSingleNode("xinwen");//查找xinwen节点
            XmlNodeList xnl = root.ChildNodes; //获取xinwen下面所以子节点
            for (int i = 0; i < xnl.Count; i++)
            {
                XmlNodeList xnl11 = xnl.Item(i).SelectNodes("news_id");//查找news_id下面节点集合
                XmlElement xe = (XmlElement)xnl11.Item(0); //news_id节点下面的元素
                if (xe.InnerText == news_id) //获取节点以及所有子集的串联值
                {
                    xe.InnerText = news_id;
                    xe.ParentNode.ChildNodes.Item(1).InnerText = title;
                    xe.ParentNode.ChildNodes.Item(2).InnerText = author;
                    xe.ParentNode.ChildNodes.Item(3).InnerText = ly;
                    xe.ParentNode.ChildNodes.Item(4).InnerText = content;
                }
            }
            xmlDoc.Save(url);
            Response.Redirect("news_manage.aspx");
        }

    双击返回新闻管理列表按钮,代码如下:
    protected void Button2_Click(object sender, EventArgs e)
        {
            Response.Redirect("news_manage.aspx");
        }


    10、制作新闻删除页面del_news.aspx
    因为要对XML进行操作,并且要写入XML,所以先导入命名空间
    using System.Xml;
    using System.IO;

    protected void Page_Load(object sender, EventArgs e)
        {
            string url = Server.MapPath("news.xml");
            string news_id = Request.QueryString["news_id"];
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(url); //加载XML文件
            XmlNode root = xmlDoc.SelectSingleNode("xinwen");//查找xinwen节点
            XmlNodeList xnl = root.ChildNodes; //获取xinwen下面所以子节点
            for (int i = 0; i < xnl.Count; i++)
            {
                XmlNodeList xnl11 = xnl.Item(i).SelectNodes("news_id");
                //查找username下面节点集合
                XmlElement xe = (XmlElement)xnl11.Item(0);
                //username节点下面的元素
                if (xe.InnerText == news_id) //获取节点以及所有子集的串联值
                {
                    root.RemoveChild(xe.ParentNode);//移除指顶节点
                }
            }
            xmlDoc.Save(url);
            Response.Redirect("news_manage.aspx");
        }

  • 相关阅读:
    学习进度笔记
    学习进度笔记
    学习进度笔记
    《一级架构师》阅读笔记
    学习进度笔记
    学习进度笔记
    学习进度笔记
    mysql
    error: 'wblog/' does not have a commit checked out
    有用的网页
  • 原文地址:https://www.cnblogs.com/ae6623/p/4416877.html
Copyright © 2020-2023  润新知