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

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

制作一个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");
    }

目录
相关文章
|
8天前
|
开发框架 前端开发 JavaScript
采用C#.Net +JavaScript 开发的云LIS系统源码 二级医院应用案例有演示
技术架构:Asp.NET CORE 3.1 MVC + SQLserver + Redis等 开发语言:C# 6.0、JavaScript 前端框架:JQuery、EasyUI、Bootstrap 后端框架:MVC、SQLSugar等 数 据 库:SQLserver 2012
|
20天前
|
XML JSON JavaScript
使用JSON和XML:数据交换格式在Java Web开发中的应用
【4月更文挑战第3天】本文比较了JSON和XML在Java Web开发中的应用。JSON是一种轻量级、易读的数据交换格式,适合快速解析和节省空间,常用于API和Web服务。XML则提供更强的灵活性和数据描述能力,适合复杂数据结构。Java有Jackson和Gson等库处理JSON,JAXB和DOM/SAX处理XML。选择格式需根据应用场景和需求。
|
1月前
|
数据挖掘 C# 开发工具
采用C#语言开发的全套医院体检系统PEIS源码功能介绍
体检系统,是专为体检中心/医院体检科等体检机构,专门开发的全流程管理系统,通过软件实现检测仪器数据自动提取,内置多级医生工作台,细化工作将体检检查结果汇总,生成体检报告登记到计算机系统中。通过软件系统进行数据分析统计与评判以及建立体检相关的体检档案。从而实现体检流程的信息化,提高工作效率,减少手动结果录入的一些常犯错误。 在实际应用中,医院体检系统能够解决传统体检中手工操作带来的问题,如工作量大、效率低下、易漏检、重检或错检等。通过与医院信息系统(如HIS、LIS、PACS等)的连接,系统能够满足体检中心的日常工作流程,提供更好的管理、统计和查询分析功能。同时,基于网络基础的系统可以在网上传输
23 1
|
3月前
|
存储 C#
C#入门开发(Hello World,运算符)
C#入门开发(Hello World,运算符)
27 0
|
4月前
|
JavaScript C#
【傻瓜级JS-DLL-WINCC-PLC交互】2.wincc使用C#开发的.net控件
【傻瓜级JS-DLL-WINCC-PLC交互】2.wincc使用C#开发的.net控件
41 0
|
4月前
|
SQL 关系型数据库 MySQL
C#程序设计案例开发教程
C#程序设计案例开发教程
47 0
|
4月前
|
网络协议 C# C++
BytesIO | C# 超简洁的TCP服务端开发(完整源码+视频教程)
本章将继续利用BytesIO开发TCP的服务端,简洁明了依然是主旋律,我们要在三十行代码内除了实现一个TCP服务端以外,使其支持聊天室(消息转发)、连接数限制、心跳超时检测等功能。 现在,一起跟着视频敲一敲吧!
165 0
BytesIO | C# 超简洁的TCP服务端开发(完整源码+视频教程)
|
4月前
|
存储 算法 数据处理
C# | 上位机开发新手指南(十一)压缩算法
流式压缩 流式压缩是一种能够实时处理数据流的压缩方式,例如音频、视频等实时传输的数据。 通过流式压缩算法,我们可以边读取边压缩数据,并能够随时输出已压缩的数据,以确保数据的实时性和减少存储和传输所需的带宽。 块压缩 块压缩则是将数据划分为固定大小的块,在每个块内进行独立的压缩处理。块压缩通常适用于文件、存储、传输等离线数据处理场景。 字典压缩 字典压缩是一种基于字典的压缩算法,通过建立一个字典来存储一组重复出现的字符串,并将这些字符串替换成字典中相应的索引,从而减少数据的存储和传输。字典压缩算法可以更好地处理数据中的重复模式,因为它们可以通过建立字典来存储和恢复重复出现的字符串。
46 0
C# | 上位机开发新手指南(十一)压缩算法
|
4月前
|
算法 C# 数据安全/隐私保护
C# | 上位机开发新手指南(十)加密算法——ECC
本篇文章我们将继续探讨另一种非对称加密算法——ECC。 严格的说,其实ECC并不是一种非对称加密算法,它是一种基于椭圆曲线的加密算法,广泛用于数字签名和密钥协商。 与传统的非对称加密算法(例如RSA)不同,ECC算法使用椭圆曲线上的点乘法来生成密钥对和进行加密操作,而不是使用大数分解等数学算法。这使得ECC算法具有相同的安全性和强度,但使用更少的位数,因此在资源受限的环境中具有优势。 ECC算法虽然使用公钥和私钥进行加密和解密操作,但是这些操作是基于点乘法实现的,而不是基于大数分解等算法实现的。因此,ECC算法可以被视为一种非对称加密算法的变体,但是它与传统的非对称加密算法有所不同。
130 0
C# | 上位机开发新手指南(十)加密算法——ECC
|
4月前
|
XML 算法 安全
C# | 上位机开发新手指南(九)加密算法——RSA
RSA的特性 非对称性 RSA算法使用公钥和私钥两个不同的密钥,公钥用于加密数据,私钥用于解密数据。公钥可以公开,任何人都可以使用,而私钥只有密钥持有人可以访问。 安全性 RSA算法基于大数分解难题,即将一个大的合数分解成其质数因子的乘积。由于目前没有有效的算法可以在合理的时间内对大质数进行分解,因此RSA算法被认为是一种安全的加密算法。 可逆性 RSA算法既可以用于加密,也可以用于解密。加密和解密都是可逆的过程,只要使用正确的密钥,就可以还原原始数据。 签名 RSA算法可以用于数字签名,用于验证数据的完整性和真实性。签名过程是将数据使用私钥进行加密,验证过程是将签名使用公钥进行解密。
102 0
C# | 上位机开发新手指南(九)加密算法——RSA