7

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

 3 years ago
source link: https://www.cnblogs.com/Can-daydayup/p/16036872.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

文章正文:

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

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

转义字符符号名称

& & 和号

< < 小于

> > 大于

' ' 省略号

" " 引号

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

  1. CDATA

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

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

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

作者:追逐时光者

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

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


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK