C# XML基础入门小结(XML文件内容增删改查清)

作者:追逐时光者 时间:2022-10-18 17:12:02 

前言:

最近对接了一个第三方的项目,该项目的数据传输格式是XML。由于工作多年只有之前在医疗行业的时候有接触过少量数据格式是XML的接口,之后就几乎没有接触过了。因此对于XML这块自己感觉还是有很多盲点和不足的,所以自己通过一些网上的资料总结了一下XML相关知识点。

什么是XML?

  • XML是一种可扩展标记语言(EXtensible Markup Language)。

  • XML是一种很像HTML的标记语言。

  • XML的设计宗旨是传输数据,而不是显示数据。

  • XML标签没有被预定义。您需要自行定义标签。

  • XML被设计为具有自我描述性。

  • XML是 W3C 的推荐标准。

XML的优缺点

XML的优点

  • 语法严谨,格式统一,符合标准。

  • 容易与其他系统进行远程交互,数据共享比较方便。

XML的缺点

  • 扩展性、弹性、易读性均不佳。

  • XML文件庞大,文件格式复杂,传输占带宽。

  • 服务器端和客户端解析XML花费较多的资源和时间。

XML简单示例

在线xml验证工具:http://tools.jb51.net/code/xmlcodeformat

<?xml version="1.0" encoding="utf-8"?>
<books>
   <book>
       <author>追逐时光者</author>
       <title>XML学习教程</title>
       <publisher>时光出版社</publisher>
   </book>
</books>

XML中5个预定义的实体引用

转义字符符号名称
&amp;&和号
&lt;<小于
&gt;>大于
&apos;'省略号
&quot;"引号

严格地讲,在 XML 中仅有字符 "<"和"&" 是非法的。省略号、引号和大于号是合法的。这时,Xml有两种解决方案来处理这种问题。

CDATA

转义字符

C#把特殊符号转换为转义字符

/// <summary>
       /// 特殊符号转换为转义字符
       /// </summary>
       /// <param name="xmlStr"></param>
       /// <returns></returns>
       public string XmlSpecialSymbolConvert(string xmlStr)
       {
           return xmlStr.Replace("&", "&amp;").Replace("<", "&lt;").Replace(">", "&gt;").Replace("\'", "&apos;").Replace("\"", "&quot;");
       }

C#创建简单的XML文件

/// <summary>
       /// 创建Xml文件
       /// </summary>
       public void CreateXmlFile()
       {
           XmlDocument xmlDoc = new XmlDocument();
           //创建类型声明节点  
           XmlNode node = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", "");
           xmlDoc.AppendChild(node);
           //创建Xml根节点  
           XmlNode root = xmlDoc.CreateElement("books");
           xmlDoc.AppendChild(root);

XmlNode root1 = xmlDoc.CreateElement("book");
           root.AppendChild(root1);

//创建子节点
           CreateNode(xmlDoc, root1, "author", "追逐时光者");
           CreateNode(xmlDoc, root1, "title", "XML学习教程");
           CreateNode(xmlDoc, root1, "publisher", "时光出版社");
           //将文件保存到指定位置
           xmlDoc.Save("D://xmlSampleCreateFile.xml");
       }

/// <summary>    
       /// 创建节点    
       /// </summary>    
       /// <param name="xmlDoc">xml文档</param>    
       /// <param name="parentNode">Xml父节点</param>    
       /// <param name="name">节点名</param>    
       /// <param name="value">节点值</param>    
       ///  
       public void CreateNode(XmlDocument xmlDoc, XmlNode parentNode, string name, string value)
       {
           //创建对应Xml节点元素
           XmlNode node = xmlDoc.CreateNode(XmlNodeType.Element, name, null);
           node.InnerText = value;
           parentNode.AppendChild(node);
       }

创建生成的Xml文件

<?xml version="1.0" encoding="utf-8"?>
<books>
 <book>
   <author>追逐时光者</author>
   <title>XML学习教程</title>
   <publisher>时光出版社</publisher>
 </book>
</books>

C#在XML文件添加节点

这次我们是在上一次新建的XML文件中做操作,在book二级节点下添加一个新的节点名为publishdate(发布时间),该节点的value为2022-03-26。

private static void AppendNode()
       {
           XmlDocument xmlDoc = new XmlDocument();
           xmlDoc.Load("D://xmlSampleCreateFile.xml");//加载Xml文件
           XmlNode root = xmlDoc.SelectSingleNode("books/book");//选择要添加子节点的book节点
           //创建一个新的Xml节点元素
           XmlNode node = xmlDoc.CreateNode(XmlNodeType.Element, "publishdate", null);
           node.InnerText = "2022-03-26";
           root.AppendChild(node);//将创建的item子节点添加到items节点的尾部
           xmlDoc.Save("D://AppendNodeFile.xml");//保存修改的Xml文件内容
       }

添加节点成功后的XML文件内容

<?xml version="1.0" encoding="utf-8"?>
<books>
 <book>
   <author>追逐时光者</author>
   <title>XML学习教程</title>
   <publisher>时光出版社</publisher>
   <publishdate>2022-03-26</publishdate>
 </book>
</books>

C#修改XML文件节点的数据

这次我们是在第一次新建的XML文件中做操作,把在book二级节点下的author的内容改成:大姚同学

private static void UpdateXml()
       {
           XmlDocument xmlDoc = new XmlDocument();
           xmlDoc.Load("D://xmlSampleCreateFile.xml");//加载Xml文件
           XmlNode xns = xmlDoc.SelectSingleNode("books/book");//查找要修改的节点
           XmlNodeList xmlNodeList = xns.ChildNodes;//取出book节点下所有的子节点

foreach (XmlNode xmlNode in xmlNodeList)
           {
               XmlElement xmlElement = (XmlElement)xmlNode;//将节点转换一下类型
               if (xmlElement.Name=="author")//判断该子节点是否是要查找的节点
               {
                   xmlElement.InnerText = "大姚同学";//设置新值
                   break;
               }
           }
           xmlDoc.Save("D://UpdateXml.xml");//保存修改的Xml文件内容
       }

修改后的XML文件内容

<?xml version="1.0" encoding="utf-8"?>
<books>
 <book>
   <author>大姚同学</author>
   <title>XML学习教程</title>
   <publisher>时光出版社</publisher>
 </book>
</books>

C#删除XML文件中的指定节点

这次我们是在第一次新建的XML文件中做操作,删除author节点。

private static void DeleteXmlNode()
       {
           XmlDocument xmlDoc = new XmlDocument();
           xmlDoc.Load("D://xmlSampleCreateFile.xml");//加载Xml文件
           XmlNode xns = xmlDoc.SelectSingleNode("books/book");//查找要删除的根节点

#region 删除author节点

var delNode = xmlDoc.SelectSingleNode("books/book/" + "author");
           xns.RemoveChild(delNode);

#endregion

xmlDoc.Save("D://DeleteXmlNode.xml");//保存操作后的Xml文件内容
       }

C#清空指定XML节点数据

这次我们是在第一次新建的XML文件中做操作,清空author节点下的数据。

private static void ClearDataXmlNode()
       {
           XmlDocument xmlDoc = new XmlDocument();
           xmlDoc.Load("D://xmlSampleCreateFile.xml");//加载Xml文件
           XmlNode xns = xmlDoc.SelectSingleNode("books/book");//查找要删除的根节点

#region 清空author节点下的数据
           XmlNodeList xmlNodeList = xns.ChildNodes;//取出book节点下所有的子节点
           foreach (XmlNode xmlNode in xmlNodeList)
           {
               XmlElement xmlElement = (XmlElement)xmlNode;//将节点转换一下类型
               if (xmlElement.Name == "author")//判断该子节点是否是要查找的节点
               {
                   //清空author节点下的数据
                   xmlElement.RemoveAll();//删除该节点的全部内容
               }
           }
           #endregion

xmlDoc.Save("D://ClearDataXmlNode.xml");//保存操作后的Xml文件内容
       }

学习参考资料

w3cSchool-XML 教程

.NET中XML序列化和反序列化常用类和用来控制XML序列化的属性总结

来源:https://www.cnblogs.com/Can-daydayup/p/16036872.html

标签:C#,XML
0
投稿

猜你喜欢

  • Java中的final关键字使用方式

    2023-01-16 15:04:25
  • Visual C#中如何使用IComparable和IComparer接口

    2021-12-17 20:01:02
  • Java源码解析之object类

    2023-11-05 00:46:28
  • idea 多模块项目依赖父工程class找不到问题的方法

    2022-06-08 10:47:41
  • C#的通用DbHelper类(支持数据连接池)示例详解

    2022-01-14 11:59:56
  • java弱口令检测机制解析

    2022-09-27 01:07:06
  • C#使用DoddleReport快速生成报表

    2022-05-31 06:39:59
  • Java Excel透视表相关操作实现代码

    2022-02-27 00:11:01
  • Java通过卖票理解多线程

    2023-01-05 02:31:44
  • 浅谈Java编程中string的理解与运用

    2021-05-31 22:15:44
  • 如何构建可重复读取inputStream的request

    2023-09-18 02:32:56
  • C# 添加、修改以及删除Excel迷你图表的实现方法

    2023-04-06 22:07:27
  • 深入理解SpringMVC中央调度器DispatcherServlet

    2023-03-11 08:54:48
  • Spring Boot将项目打包成war包的操作方法

    2022-01-02 22:30:50
  • Android handle-message的发送与处理案例详解

    2023-07-21 09:28:13
  • C#中实现可变参数实例

    2022-03-27 15:48:07
  • Android ViewPager中显示图片与播放视频的填坑记录

    2023-12-23 14:28:40
  • 解决使用json-lib包实现xml转json时空值被转为空中括号的问题

    2022-10-20 02:12:14
  • 详解Java中NullPointerException异常的原因详解以及解决方法

    2023-01-22 20:13:28
  • 一起来了解Java的File类和IO流

    2022-04-12 09:23:15
  • asp之家 软件编程 m.aspxhome.com