C# XML基礎(chǔ)入門(mén)小結(jié)(XML文件內(nèi)容增刪改查清)
前言:
最近對(duì)接了一個(gè)第三方的項(xiàng)目,該項(xiàng)目的數(shù)據(jù)傳輸格式是XML。由于工作多年只有之前在醫(yī)療行業(yè)的時(shí)候有接觸過(guò)少量數(shù)據(jù)格式是XML的接口,之后就幾乎沒(méi)有接觸過(guò)了。因此對(duì)于XML這塊自己感覺(jué)還是有很多盲點(diǎn)和不足的,所以自己通過(guò)一些網(wǎng)上的資料總結(jié)了一下XML相關(guān)知識(shí)點(diǎn)。
什么是XML?
- XML是一種可擴(kuò)展標(biāo)記語(yǔ)言(EXtensible Markup Language)。
- XML是一種很像HTML的標(biāo)記語(yǔ)言。
- XML的設(shè)計(jì)宗旨是傳輸數(shù)據(jù),而不是顯示數(shù)據(jù)。
- XML標(biāo)簽沒(méi)有被預(yù)定義。您需要自行定義標(biāo)簽。
- XML被設(shè)計(jì)為具有自我描述性。
- XML是 W3C 的推薦標(biāo)準(zhǔn)。
XML的優(yōu)缺點(diǎn)
XML的優(yōu)點(diǎn)
- 語(yǔ)法嚴(yán)謹(jǐn),格式統(tǒng)一,符合標(biāo)準(zhǔn)。
- 容易與其他系統(tǒng)進(jìn)行遠(yuǎn)程交互,數(shù)據(jù)共享比較方便。
XML的缺點(diǎn)
- 擴(kuò)展性、彈性、易讀性均不佳。
- XML文件龐大,文件格式復(fù)雜,傳輸占帶寬。
- 服務(wù)器端和客戶端解析XML花費(fèi)較多的資源和時(shí)間。
XML簡(jiǎn)單示例
在線xml驗(yàn)證工具:http://tools.jb51.net/code/xmlcodeformat
<?xml version="1.0" encoding="utf-8"?> <books> <book> <author>追逐時(shí)光者</author> <title>XML學(xué)習(xí)教程</title> <publisher>時(shí)光出版社</publisher> </book> </books>
XML中5個(gè)預(yù)定義的實(shí)體引用
轉(zhuǎn)義字符 | 符號(hào) | 名稱(chēng) |
---|---|---|
& | & | 和號(hào) |
< | < | 小于 |
> | > | 大于 |
' | ' | 省略號(hào) |
" | " | 引號(hào) |
嚴(yán)格地講,在 XML 中僅有字符 "<"和"&" 是非法的。省略號(hào)、引號(hào)和大于號(hào)是合法的。這時(shí),Xml有兩種解決方案來(lái)處理這種問(wèn)題。
CDATA
轉(zhuǎn)義字符
C#把特殊符號(hào)轉(zhuǎn)換為轉(zhuǎn)義字符
/// <summary> /// 特殊符號(hào)轉(zhuǎn)換為轉(zhuǎn)義字符 /// </summary> /// <param name="xmlStr"></param> /// <returns></returns> public string XmlSpecialSymbolConvert(string xmlStr) { return xmlStr.Replace("&", "&").Replace("<", "<").Replace(">", ">").Replace("\'", "'").Replace("\"", """); }
C#創(chuàng)建簡(jiǎn)單的XML文件
/// <summary> /// 創(chuàng)建Xml文件 /// </summary> public void CreateXmlFile() { XmlDocument xmlDoc = new XmlDocument(); //創(chuàng)建類(lèi)型聲明節(jié)點(diǎn) XmlNode node = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", ""); xmlDoc.AppendChild(node); //創(chuàng)建Xml根節(jié)點(diǎn) XmlNode root = xmlDoc.CreateElement("books"); xmlDoc.AppendChild(root); XmlNode root1 = xmlDoc.CreateElement("book"); root.AppendChild(root1); //創(chuàng)建子節(jié)點(diǎn) CreateNode(xmlDoc, root1, "author", "追逐時(shí)光者"); CreateNode(xmlDoc, root1, "title", "XML學(xué)習(xí)教程"); CreateNode(xmlDoc, root1, "publisher", "時(shí)光出版社"); //將文件保存到指定位置 xmlDoc.Save("D://xmlSampleCreateFile.xml"); } /// <summary> /// 創(chuàng)建節(jié)點(diǎn) /// </summary> /// <param name="xmlDoc">xml文檔</param> /// <param name="parentNode">Xml父節(jié)點(diǎn)</param> /// <param name="name">節(jié)點(diǎn)名</param> /// <param name="value">節(jié)點(diǎn)值</param> /// public void CreateNode(XmlDocument xmlDoc, XmlNode parentNode, string name, string value) { //創(chuàng)建對(duì)應(yīng)Xml節(jié)點(diǎn)元素 XmlNode node = xmlDoc.CreateNode(XmlNodeType.Element, name, null); node.InnerText = value; parentNode.AppendChild(node); }
創(chuàng)建生成的Xml文件
<?xml version="1.0" encoding="utf-8"?> <books> <book> <author>追逐時(shí)光者</author> <title>XML學(xué)習(xí)教程</title> <publisher>時(shí)光出版社</publisher> </book> </books>
C#在XML文件添加節(jié)點(diǎn)
這次我們是在上一次新建的XML文件中做操作,在book二級(jí)節(jié)點(diǎn)下添加一個(gè)新的節(jié)點(diǎn)名為publishdate(發(fā)布時(shí)間),該節(jié)點(diǎn)的value為2022-03-26。
private static void AppendNode() { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load("D://xmlSampleCreateFile.xml");//加載Xml文件 XmlNode root = xmlDoc.SelectSingleNode("books/book");//選擇要添加子節(jié)點(diǎn)的book節(jié)點(diǎn) //創(chuàng)建一個(gè)新的Xml節(jié)點(diǎn)元素 XmlNode node = xmlDoc.CreateNode(XmlNodeType.Element, "publishdate", null); node.InnerText = "2022-03-26"; root.AppendChild(node);//將創(chuàng)建的item子節(jié)點(diǎn)添加到items節(jié)點(diǎn)的尾部 xmlDoc.Save("D://AppendNodeFile.xml");//保存修改的Xml文件內(nèi)容 }
添加節(jié)點(diǎn)成功后的XML文件內(nèi)容
<?xml version="1.0" encoding="utf-8"?> <books> <book> <author>追逐時(shí)光者</author> <title>XML學(xué)習(xí)教程</title> <publisher>時(shí)光出版社</publisher> <publishdate>2022-03-26</publishdate> </book> </books>
C#修改XML文件節(jié)點(diǎn)的數(shù)據(jù)
這次我們是在第一次新建的XML文件中做操作,把在book二級(jí)節(jié)點(diǎn)下的author的內(nèi)容改成:大姚同學(xué)
private static void UpdateXml() { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load("D://xmlSampleCreateFile.xml");//加載Xml文件 XmlNode xns = xmlDoc.SelectSingleNode("books/book");//查找要修改的節(jié)點(diǎn) XmlNodeList xmlNodeList = xns.ChildNodes;//取出book節(jié)點(diǎn)下所有的子節(jié)點(diǎn) foreach (XmlNode xmlNode in xmlNodeList) { XmlElement xmlElement = (XmlElement)xmlNode;//將節(jié)點(diǎn)轉(zhuǎn)換一下類(lèi)型 if (xmlElement.Name=="author")//判斷該子節(jié)點(diǎn)是否是要查找的節(jié)點(diǎn) { xmlElement.InnerText = "大姚同學(xué)";//設(shè)置新值 break; } } xmlDoc.Save("D://UpdateXml.xml");//保存修改的Xml文件內(nèi)容 }
修改后的XML文件內(nèi)容
<?xml version="1.0" encoding="utf-8"?> <books> <book> <author>大姚同學(xué)</author> <title>XML學(xué)習(xí)教程</title> <publisher>時(shí)光出版社</publisher> </book> </books>
C#刪除XML文件中的指定節(jié)點(diǎn)
這次我們是在第一次新建的XML文件中做操作,刪除author節(jié)點(diǎn)。
private static void DeleteXmlNode() { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load("D://xmlSampleCreateFile.xml");//加載Xml文件 XmlNode xns = xmlDoc.SelectSingleNode("books/book");//查找要?jiǎng)h除的根節(jié)點(diǎn) #region 刪除author節(jié)點(diǎn) var delNode = xmlDoc.SelectSingleNode("books/book/" + "author"); xns.RemoveChild(delNode); #endregion xmlDoc.Save("D://DeleteXmlNode.xml");//保存操作后的Xml文件內(nèi)容 }
C#清空指定XML節(jié)點(diǎn)數(shù)據(jù)
這次我們是在第一次新建的XML文件中做操作,清空author節(jié)點(diǎn)下的數(shù)據(jù)。
private static void ClearDataXmlNode() { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load("D://xmlSampleCreateFile.xml");//加載Xml文件 XmlNode xns = xmlDoc.SelectSingleNode("books/book");//查找要?jiǎng)h除的根節(jié)點(diǎn) #region 清空author節(jié)點(diǎn)下的數(shù)據(jù) XmlNodeList xmlNodeList = xns.ChildNodes;//取出book節(jié)點(diǎn)下所有的子節(jié)點(diǎn) foreach (XmlNode xmlNode in xmlNodeList) { XmlElement xmlElement = (XmlElement)xmlNode;//將節(jié)點(diǎn)轉(zhuǎn)換一下類(lèi)型 if (xmlElement.Name == "author")//判斷該子節(jié)點(diǎn)是否是要查找的節(jié)點(diǎn) { //清空author節(jié)點(diǎn)下的數(shù)據(jù) xmlElement.RemoveAll();//刪除該節(jié)點(diǎn)的全部?jī)?nèi)容 } } #endregion xmlDoc.Save("D://ClearDataXmlNode.xml");//保存操作后的Xml文件內(nèi)容 }
學(xué)習(xí)參考資料
.NET中XML序列化和反序列化常用類(lèi)和用來(lái)控制XML序列化的屬性總結(jié)
到此這篇關(guān)于C# XML基礎(chǔ)入門(mén)小結(jié)(XML文件內(nèi)容增刪改查清)的文章就介紹到這了,更多相關(guān)C# XML基礎(chǔ)入門(mén)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#值類(lèi)型、引用類(lèi)型中的Equals和==的區(qū)別淺析
這篇文章主要介紹了C#值類(lèi)型、引用類(lèi)型中的Equals和==的區(qū)別淺析,本文分別對(duì)C#值類(lèi)型和引用類(lèi)型中的Equals和==做了講解和給出了實(shí)例,需要的朋友可以參考下2015-01-01C#使用OpenCvSharp實(shí)現(xiàn)透視變換功能
這篇文章主要為大家詳細(xì)介紹了C#如何使用OpenCvSharp實(shí)現(xiàn)透視變換的功能,文中的示例代碼簡(jiǎn)潔易懂,具有一定的學(xué)習(xí)價(jià)值,需要的小伙伴可以參考下2023-11-11C#使用System.Net郵件發(fā)送功能踩過(guò)的坑
這篇文章主要介紹了C#使用System.Net郵件發(fā)送功能踩過(guò)的坑,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11C#中的高效IO庫(kù)System.IO.Pipelines
這篇文章介紹了C#中的高效IO庫(kù)System.IO.Pipelines,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07關(guān)于C#基礎(chǔ)知識(shí)回顧--反射(二)
其實(shí)說(shuō)白了,反射就是能知道我們未知類(lèi)型的類(lèi)型信息這么一個(gè)東西.沒(méi)什么神秘可講!反射的核心是System.Type。System.Type包含了很多屬性和方法,使用這些屬性和方法可以在運(yùn)行時(shí)得到類(lèi)型信息2013-07-07c#委托把方法當(dāng)成參數(shù)(實(shí)例講解)
本篇文章主要是對(duì)c#委托把方法當(dāng)成參數(shù)的實(shí)例代碼進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-01-01C#?崩潰異常中研究頁(yè)堆布局的詳細(xì)過(guò)程
最近遇到一位朋友的程序崩潰,發(fā)現(xiàn)崩潰點(diǎn)在富編輯器 msftedit 上,這個(gè)不是重點(diǎn),重點(diǎn)在于發(fā)現(xiàn)他已經(jīng)開(kāi)啟了 頁(yè)堆,由于 頁(yè)堆 和 NT堆 的內(nèi)存布局完全不一樣,這一篇結(jié)合我的了解以及 windbg 驗(yàn)證來(lái)系統(tǒng)的介紹下 頁(yè)堆,需要的朋友可以參考下2022-10-10C#多線程學(xué)習(xí)之(一)多線程的相關(guān)概念分析
這篇文章主要介紹了C#多線程學(xué)習(xí)之多線程的相關(guān)概念,涉及C#中多線程的相關(guān)概念與使用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04c#實(shí)現(xiàn)圖片的平移和旋轉(zhuǎn)示例代碼
這篇文章主要給大家介紹了關(guān)于c#實(shí)現(xiàn)圖片的平移和旋轉(zhuǎn)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用c#具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08