C#操作XML增删改查

简介:

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

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

XML文件创建

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

1
2
3
4
5
6
7
8
9
10
11
<?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文件,创建的话也比较简单,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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方法,其他的方法,有兴趣的可以自己尝试一下,看下查询的实现:

1
2
3
4
5
6
7
8
9
10
11
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存放的是数据结果跟类相似,如果业务需要往里面动态添加数据,这个时候也需要个人控制一下,代码如下:

1
2
3
4
5
6
7
8
9
10
11
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文件已经发生变化:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?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修改

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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文件中内容很多的话,这种方式就显得的不是那么的合理,可以修改一下一上代码

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

XML删除

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

1
2
3
4
5
6
7
8
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" );

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

本文转自Fly_Elephant博客园博客,原文链接:http://www.cnblogs.com/xiaofeixiang/p/4067791.html,如需转载请自行联系原作者

相关文章
|
5月前
|
XML C# 数据格式
使用C#操作XML文件
使用C#操作XML文件
|
5月前
ssm使用全注解实现增删改查案例——web.xml
ssm使用全注解实现增删改查案例——web.xml
|
5月前
ssm使用全注解实现增删改查案例——applicationContext.xml
ssm使用全注解实现增删改查案例——applicationContext.xml
|
5月前
|
SQL 开发框架 .NET
C#进阶-LINQ实现对集合的增删改查
本篇演示了LINQ在日常开发中的常用操作,实现结果集的增删改查。目前LINQ支持两种语法,我会在每个案例前先用大家熟知的SQL语句表达,再在后面用C#的两种LINQ语法分别实现。LINQ语法第一次接触难免感到陌生,最好的学习方式就是在项目中多去使用,相信会有很多感悟。
72 0
|
9天前
|
XML JSON 数据处理
C# 中的 XML 与 JSON 数据处理
在现代软件开发中,数据交换和存储需求日益增长,XML 和 JSON 成为最常用的数据格式。本文从 C# 角度出发,详细介绍如何处理这两种格式,并提供示例代码。对于 XML,我们介绍了读取、创建和写入 XML 文件的方法;对于 JSON,则展示了如何使用 Newtonsoft.Json 库进行数据解析和序列化。此外,文章还总结了常见问题及其解决方案,帮助开发者更好地应对实际项目中的挑战。
156 61
C# 中的 XML 与 JSON 数据处理
|
4月前
|
XML Java 数据格式
Spring5系列学习文章分享---第一篇(概述+特点+IOC原理+IOC并操作之bean的XML管理操作)
Spring5系列学习文章分享---第一篇(概述+特点+IOC原理+IOC并操作之bean的XML管理操作)
41 1
|
1月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
30 1
|
2月前
|
关系型数据库 MySQL 大数据
C#使用SqlSugar操作MySQL数据库实现简单的增删改查
C#使用SqlSugar操作MySQL数据库实现简单的增删改查
164 2
|
5月前
|
XML 存储 C#
C# xml文档反序列化记事
本文介绍了使用XmlSerializer进行XML序列化和反序列化的关键点。包括:1) 以独占方式读取XML文件以避免并发问题;2) 当元素名与类型名不一致时,可通过`[XmlArrayItem]`指定元素名,或创建继承自原始类型的子类;3) 处理DateTime反序列化错误,通过中间字符串属性转换;4) 提到了常用C#特性如`[XmlRoot]`, `[XmlElement]`, `[XmlAttribute]`, `[XmlIgnore]`和`[XmlArrayItem]`的作用。
|
5月前
|
XML C# 数据格式
C# 解析XML文件
C# 解析XML文件
87 1