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


    前言:

      最近对接了一个第三方的项目,该项目的数据传输格式是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/

    1
    2
    3
    4
    5
    6
    7
    8
    "1.0" encoding="utf-8"?>
        
            追逐时光者
            XML学习教程
            时光出版社
        

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

    转义字符符号名称
    & & 和号
    < < 小于
    > > 大于
    ' ' 省略号
    " " 引号

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

    1. CDATA
    2. 转义字符

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

    复制代码
            /// 
            /// 特殊符号转换为转义字符
            /// 
            /// 
            /// 
            public string XmlSpecialSymbolConvert(string xmlStr)
            {
                return xmlStr.Replace("&", "&").Replace("<", "<").Replace(">", ">").Replace("\'", "'").Replace("\"", """);
            }
    复制代码

    C#创建简单的XML文件  

    复制代码
            /// 
            /// 创建Xml文件
            /// 
            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");
            }
    
            ///     
            /// 创建节点    
            ///     
            /// xml文档    
            /// Xml父节点    
            /// 节点名    
            /// 节点值    
            ///   
            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-26publishdate>
      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序列化的属性总结

     
  • 相关阅读:
    解决Flutter位于悬浮窗口时,应用Logo不更新问题
    多益网络面经
    【8.4】代码源 - 【数学】【历法】【删库】【不朴素的数列(Bonus)】
    高并发场景下更新数据库报错,记录一次 MySQL 死锁问题的解决
    原码,反码,补码以及计算
    数据可视化在智慧医疗中的重要应用
    为啥装了erlang,还报错erl: command not found?
    Linux 驱动程序之字符驱动
    OSPF高级特性 —— LSA-3过滤 + Distribute-list过滤
    ArcGIS基础:二维点转三维点 二维线转三维线
  • 原文地址:https://www.cnblogs.com/Can-daydayup/p/16036872.html