前言:

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

什么是XML?

  • XML是一种可扩展标记语言(EXtensible Markup Language)。
  • XML是一种很像HTML的标记语言。
  • XML的设计宗旨是传输数据,而不是显示数据。
  • XML标签没有被预定义。您需要自行定义标签。
  • XML被设计为具有自我描述性。
  • XML是 W3C 的推荐标准。

XML的优缺点

XML的优点

  • 语法严谨,格式统一,符合标准。
  • 容易与其他系统进行远程交互,数据共享比较方便。

XML的缺点

  • 扩展性、弹性、易读性均不佳。
  • XML文件庞大,文件格式复杂,传输占带宽。
  • 服务器端和客户端解析XML花费较多的资源和时间。

XML简单示例

在线xml验证工具:https://tool.ip138.com/xml/

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

XML5个预定义的实体引用

&lt; < 小于
&gt; > 大于
&amp; & 和号
&apos; ' 单引号
&quot; " 引号

C#把特殊字符转换为实体引用

public string XmlSpecialSymbolConvert(string xmlStr)
{
    if (xmlStr.Contains("&") || xmlStr.Contains("<") || xmlStr.Contains(">") || xmlStr.Contains("\"") || xmlStr.Contains("\'"))
    {
        xmlStr = xmlStr.Replace("&", "&");
        xmlStr = xmlStr.Replace("<", "<");
        xmlStr = xmlStr.Replace(">", ">");
        xmlStr = xmlStr.Replace("\"", """);
        xmlStr = xmlStr.Replace("\'", "'");
    }     return xmlStr ;
  }

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文件内容
}

学习参考资料

C#读写xml文件

w3cSchool-XML 教程

C#操作XML的通用方法总结

.NET中XML序列化和反序列化常用类

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

 

C# XML基础入门(XML文件内容增删改查清)的更多相关文章

  1. java对xml文件做增删改查------摘录

    java对xml文件做增删改查 package com.wss; import java.io.File;import java.util.ArrayList;import java.util.Lis ...

  2. 使用DOM进行xml文档的crud(增删改查)操作<操作详解>

    很多朋友对DOM有感冒,这里我花了一些时间写了一个小小的教程,这个能看懂,会操作了,我相信基于DOM的其它API(如JDOM,DOM4J等)一般不会有什么问题. 后附java代码,也可以下载(可点击这 ...

  3. Hadoop基础-HDFS的API实现增删改查

    Hadoop基础-HDFS的API实现增删改查 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 本篇博客开发IDE使用的是Idea,如果没有安装Idea软件的可以去下载安装,如何安装 ...

  4. MyBatis学习 之 二、SQL语句映射文件(2)增删改查、参数、缓存

    目录(?)[-] 二SQL语句映射文件2增删改查参数缓存 select insert updatedelete sql parameters 基本类型参数 Java实体类型参数 Map参数 多参数的实 ...

  5. 基于SpringMVC的文件(增删改查)上传、下载、更新、删除

    一.项目背景 摘要:最近一直在忙着项目的事,3个项目过去了,发现有一个共同的业务,那就是附件的处理,附件包括各种文档,当然还有图片等特殊文件,由于时间的关系,每次都是匆匆忙忙的搞定上线,称这项目的空档 ...

  6. 【练习】Python第四次:实现对文件的增删改查

    一,实现对文件的增删改查 (一),三级菜单的处理结构及退出技巧:使用TAG标记 tag=True while tag: print('leve1') choice=input("level1 ...

  7. MyBatis学习(二)、SQL语句映射文件(2)增删改查、参数、缓存

    二.SQL语句映射文件(2)增删改查.参数.缓存 2.2 select 一个select 元素非常简单.例如: <!-- 查询学生,根据id --> <select id=" ...

  8. android 入门 006(sqlite增删改查)

    android 入门 006(sqlite增删改查) package cn.rfvip.feb_14_2_sqlite; import android.content.Context; import ...

  9. Vc数据库编程基础MySql数据库的表增删改查数据

    Vc数据库编程基础MySql数据库的表增删改查数据 一丶表操作命令 1.查看表中所有数据 select * from 表名 2.为表中所有的字段添加数据 insert into 表名( 字段1,字段2 ...

随机推荐

  1. Windows微信清理工具v.3.0.1

    Windows微信清理工具v.3.0.1 今天,我原创的Windows微信清理工具迎来最大更新! v.3.0.0更新内容: 1.使用tkinter重构GUI,界面更简单易用! 2.增加"清理 ...

  2. vue的父与子组件的访问

    父访问子 (需要掌握) this.$children 和 this.$refs this.$children 返回的是一个数组,包含父组件的所有子组件 this,$refs 返回的是一个对象,默认为空 ...

  3. 【Azure API 管理】API Management如何有效且快速更新呢?如对APIs/Policy等设置内容

    问题描述 APIM中的内容(API, Policy)等内容,如果有需要更新时候,通常可以在Azure APIM门户上操作,通过一个接口一个设置的修改,也可以针对一个接口导入/导出的方式修改.当APIM ...

  4. 使用讯飞tts+ffmpeg自动生成视频

    参考 FFmpeg 讯飞离线语音合成 起因 某日,看到一个营销号的视频说做视频日进斗金,大意是用软件识别文章小说,搭配一些图片转换成自己的视频.看完当时脑海里冒出一个念头,我也可以,于是有了这番尝试. ...

  5. Linux下/目录 、/home目录 、~目录的区别

    / :根目录 ,所有目录的最顶层目录,从任何用户执行该命令都会进入同一个目录,即所有用户共享.如下图: /home:/下面的home目录,名为家目录,但是很多人叫为用户列表目录,因为/home下是这台 ...

  6. ISISv4协议测试——网络测试仪实操

    文章关键词 ISIS协议:路由协议:协议测试: 一.文章简介: isis是一种与ospf很相似的网络协议(属于动态路由协议),它被应用在巨大规模网络,如运营商以及银行等.同样的它也是基于链路状态算法, ...

  7. 【C# 练习】通过ZoomGame这个案例加强对 反射 插件 特性的认识

    游戏情景设定: 有一个游戏机,里面出现几种动物让儿童选择.选择完动物后,在输入数值让动物叫几次. 动物类型以插件的形势存在,可以外包给其他人开发,并提供了开发接口AnimalTool.SDK.dll. ...

  8. 小白学python第2问: 为什么只有int,没有long?

    为什么只有int,没有long? 在python官网开发者指引里面能找到 PEP 237 -- Unifying Long Integers and Integers,这里说明了为什么要统一 int ...

  9. 运维人员常用的Linux命令总结

    转至:https://www.cnblogs.com/CHLL55/p/13698946.html 目录结构 目录 说明 /bin 存放可执行文件 /boot 核心与启动相关文件 /dev 设备有关的 ...

  10. 教程6--配置ssh

    配置ssh 如果需要使用到远程仓库,那么就需要两个步骤: (1)配置创建SSH key(用于识别用户,免得每次输入账号密码) 在命令窗口输入ssh-keygen -t rsa -c "你的邮 ...