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>

XML中5個預定義的實體引用

轉義字符符號名稱
&amp; & 和號
&lt; < 小於
&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文件

<?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序列化的屬性總結

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章