C#操作XML增删改查

原文:C#操作XML增删改查

XML文件是一种常用的文件格式,不管是B/S还是C/S都随处可见XML的身影。Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具。XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。微软也提供了一系列类库来倒帮助我们在应用程序中存储XML文件。

    “在程序中访问进而操作XML文件一般有两种模型,分别是使用DOM(文档对象模型)和流模型,使用DOM的好处在于它允许编辑和更新XML文档,可以随机访问文档中的数据,可以使用XPath查询,但是,DOM的缺点在于它需要一次性的加载整个文档到内存中,对于大型的文档,这会造成资源问题。流模型很好的解决了这个问题,因为它对XML文件的访问采用的是流的概念,也就是说,任何时候在内存中只有当前节点,但它也有它的不足,它是只读的,仅向前的,不能在文档中执行向后导航操作。”

XML文件创建

首先来看一个简单的XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<Persons>
  <Person id="1">
    <Name>FlyElephant</Name>
    <Age>24</Age>
  </Person>
  <Person id="2">
    <Name>keso</Name>
    <Age>25</Age>
  </Person>
</Persons>

 这是最常见的Dom形式的XML文件,创建的话也比较简单,代码如下:

     XmlDocument doc = new XmlDocument();
            XmlDeclaration dec = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
            doc.AppendChild(dec);
            //根节点
            XmlElement root = doc.CreateElement("Persons");
            doc.AppendChild(root);

            //根节点的添加独立子节点
            XmlElement person = doc.CreateElement("Person");
            person.SetAttribute("id", "1");
            person.AppendChild(getChildNode(doc, "Name", "FlyElephant"));
            person.AppendChild(getChildNode(doc, "Age", "24"));
            root.AppendChild(person);

            //根节点的添加独立子节点
            person = doc.CreateElement("Person");
            person.SetAttribute("id", "2");
            person.AppendChild(getChildNode(doc, "Name", "keso"));
            person.AppendChild(getChildNode(doc, "Age", "25"));
            root.AppendChild(person);

            doc.Save("person.xml");
            Console.WriteLine("创建成功");

 XML文件的读取

C#中读取XML有三种方式,XmlDocument,XmlTextReader,Linq to Xml,由于本人常用的是XmlDocument方法,其他的方法,有兴趣的可以自己尝试一下,看下查询的实现:

   XmlDocument doc = new XmlDocument();
            doc.Load("person.xml");    //加载Xml文件
            XmlElement root = doc.DocumentElement;   //获取根节点
            XmlNodeList personNodes = root.GetElementsByTagName("Person"); //获取Person子节点集合
            foreach (XmlNode node in personNodes)
            {
                string id = ((XmlElement)node).GetAttribute("id");   //获取Name属性值
                string name = ((XmlElement)node).GetElementsByTagName("Name")[0].InnerText;  //获取Age子XmlElement集合
                string age = ((XmlElement)node).GetElementsByTagName("Age")[0].InnerText;
                Console.WriteLine("编号:" + id + "姓名:" + name + "年龄:" + age);
            }

  结果如下:

XML添加

XML存放的是数据结果跟类相似,如果业务需要往里面动态添加数据,这个时候也需要个人控制一下,代码如下:

           XmlDocument doc = new XmlDocument();
            doc.Load("person.xml");
            XmlElement root = doc.DocumentElement;
            //根节点的添加独立子节点
            XmlElement person = doc.CreateElement("Person");
            person.SetAttribute("id", "3");
            person.AppendChild(getChildNode(doc, "Name", "Elephant"));
            person.AppendChild(getChildNode(doc, "Age", "23"));
            root.AppendChild(person);
            doc.Save("person.xml");
            Console.WriteLine("XML文件中节点添加成功");

 这个时候XML文件已经发生变化:

<?xml version="1.0" encoding="UTF-8"?>
<Persons>
  <Person id="1">
    <Name>FlyElephant修改</Name>
    <Age>24</Age>
  </Person>
  <Person id="2">
    <Name>keso</Name>
    <Age>25</Age>
  </Person>
  <Person id="3">
    <Name>Elephant</Name>
    <Age>23</Age>
  </Person>
</Persons>

 XML修改

修改其中的一个节点的话,最简单的就是遍历,遍历的时候修改自己想要修改的元素:

   XmlDocument doc = new XmlDocument();
            doc.Load("person.xml");    //加载Xml文件
            XmlElement root = doc.DocumentElement;   //获取根节点
            XmlNodeList personNodes = root.GetElementsByTagName("Person"); //获取Person子节点集合
            foreach (XmlNode node in personNodes)
            {
                XmlElement ele = (XmlElement)node;
                if (ele.GetAttribute("id") == "3")
                {
                    XmlElement nameEle = (XmlElement)ele.GetElementsByTagName("Name")[0];
                    nameEle.InnerText = nameEle.InnerText + "修改";
                }
            }
            Console.WriteLine("节点修改成功");
            doc.Save("person.xml");

  当然如果XML文件中内容很多的话,这种方式就显得的不是那么的合理,可以修改一下一上代码

            XmlElement selectEle = (XmlElement)root.SelectSingleNode("/Persons/Person[@id='1']");
            XmlElement nameEle = (XmlElement)selectEle.GetElementsByTagName("Name")[0];
            nameEle.InnerText = nameEle.InnerText + "修改";

XML删除

经过上面的操作,删除节点就很简单的,代码如下:

            XmlDocument doc = new XmlDocument();
            doc.Load("person.xml");    //加载Xml文件
            XmlElement root = doc.DocumentElement;   //获取根节点
            XmlNodeList personNodes = root.GetElementsByTagName("Person"); //获取Person子节点集合
            XmlNode selectNode =root.SelectSingleNode("/Persons/Person[@id='1']");
            root.RemoveChild(selectNode);
            Console.WriteLine("节点删除成功");
            doc.Save("person.xml");

  周末看博客的都是强人,大家周末愉快~

时间: 2024-08-24 11:57:41

C#操作XML增删改查的相关文章

javascript操作xml(增删改查)例子代码hta版_hta

包括了stu.hta(是HTML应用程序);      stu.xml 注意下面的HTML代码必须保存为后缀名为hta否则当对XML文件进行操作(增删改)的时候就会提示没有权限!! 文件stu.hta代码如下: 复制代码 代码如下: <html> <head> <title> 数据岛的显示 </title> <style type="text/css"> #findPanel { position:absolute; widt

javascript Xml增删改查(IE下)操作实现代码_javascript技巧

html文件: 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>j

asp.net操作xml增删改示例分享

 这篇文章主要介绍了asp.net操作xml增删改示例,需要的朋友可以参考下   代码如下: 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.We

javascript js 操作数组 增删改查的简单实现_javascript技巧

函数定义 Array.prototype.indexOf = function(val) { for (var i = 0; i < this.length; i++) { if (this[i] == val) return i; } return -1; }; Array.prototype.remove = function(val) { var index = this.indexOf(val); if (index > -1) { this.splice(index, 1); } }

node.js操作mysql(增删改查)_node.js

最近这段时间研究Node感觉不错,自己做了一个增删改查,虽然有些简陋,但是思想是想通的,其实所有项目都是增删改查,有助于初学者快速掌握Node  首先 本实例展示的是基于Node+Express+node-mysql快速搭建的一套增删改查,视图模板是jade,基本上都是现在能用的到的技术,市面上的实例也特别少,有用的又不新,所以自己写一个  基本工作 首先我们准备一些基本的,因为我是用mysql麻烦可以自己装一下mysql,去官网可以下各种操作系统的安装包. 实例就一张表,下面是这张表的建表语句

实战ios Plist 读 写操作及 增删改查 排序

pist 最为持久化保存的一种方式!本身plist文件是xml ,对于小数量数据可以采用plis 的方法!这样更高效!废话不多说了!进入正题吧!如果是一个新手用plist的话一定会遇到各种问题!我当时就是这样走过来的!也是做个总结吧! 功能介绍:保存学生的基本信息: 一. 在故事板上拖拽几个控件吧如下图用来输入学生的信息 并在ViewController.h 里关联相应的控件! @interface ViewController : UIViewController @property (wea

asp.net操作xml增删改示例分享_实用技巧

复制代码 代码如下: 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.HtmlCo

java对xml节点属性的增删改查实现方法_java

学习本文之前请先看我的另一篇文章JAVA对XML节点的操作可以对XML操作有更好的了解. package vastsum; import java.io.File; import java.io.FileWriter; import java.util.Iterator; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.Element; import org.dom4j.io.SAXReader; i

spring入门((12) spring与hibernate整合完成增删改查的操作

本文是在上一篇博文的基础之上,通过继承HibernateDaoSupport调用hibernateTemplate类,只要将UserDaoImpl.java 改为继承HibernateDaoSupport类,还有spring-dao.xml文件加入对HibernateDaoSupport的配置bean即可,具体实现源码如 下: UserDaoImpl.java package www.csdn.spring.hibernate.dao.copy; import java.util.List; i