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

博客 分享
0 232
张三
张三 2022-03-26 14:57:10
悬赏:0 积分 收藏

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

 

 
posted @ 2022-03-26 14:30 追逐时光者 阅读(13) 评论(0) 编辑 收藏 举报
回帖
    张三

    张三 (王者 段位)

    821 积分 (2)粉丝 (41)源码

     

    温馨提示

    亦奇源码

    最新会员