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/

追逐时光者 XML学习教程 时光出版社

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

转义字符

符号

名称

&

&

和号

<

<

小于

&gt;

>

大于

&apos;

省略号

&quot;

引号

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

  1. CDATA
  2. 转义字符

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文件

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

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

<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序列化的属性总结

作者:追逐时光者

作者简介:一个热爱编程,善于分享,喜欢学习、探索、尝试新事物,新技术的程序猿。

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如果该篇文章对您有帮助的话,可以点一下右下角的【♥推荐♥】,希望能够持续的为大家带来好的技术文章,文中可能存在描述不正确或错误的地方,欢迎指正、补充,不胜感激 !