網站首頁 編程語言 正文
前言:
最近對接了一個第三方的項目,該項目的數據傳輸格式是XML。由于工作多年只有之前在醫療行業的時候有接觸過少量數據格式是XML的接口,之后就幾乎沒有接觸過了。因此對于XML這塊自己感覺還是有很多盲點和不足的,所以自己通過一些網上的資料總結了一下XML相關知識點。
什么是XML?
- XML是一種可擴展標記語言(EXtensible Markup Language)。
- XML是一種很像HTML的標記語言。
- XML的設計宗旨是傳輸數據,而不是顯示數據。
- XML標簽沒有被預定義。您需要自行定義標簽。
- XML被設計為具有自我描述性。
- XML是 W3C 的推薦標準。
XML的優缺點
XML的優點
- 語法嚴謹,格式統一,符合標準。
- 容易與其他系統進行遠程交互,數據共享比較方便。
XML的缺點
- 擴展性、彈性、易讀性均不佳。
- XML文件龐大,文件格式復雜,傳輸占帶寬。
- 服務器端和客戶端解析XML花費較多的資源和時間。
XML簡單示例
在線xml驗證工具:http://tools.jb51.net/code/xmlcodeformat
追逐時光者 XML學習教程 時光出版社
XML中5個預定義的實體引用
轉義字符 | 符號 | 名稱 |
---|---|---|
& | & | 和號 |
< | < | 小于 |
> | > | 大于 |
' | ' | 省略號 |
" | " | 引號 |
嚴格地講,在 XML 中僅有字符 "<"和"&" 是非法的。省略號、引號和大于號是合法的。這時,Xml有兩種解決方案來處理這種問題。
CDATA
轉義字符
C#把特殊符號轉換為轉義字符
////// 特殊符號轉換為轉義字符 /// /// ///public string XmlSpecialSymbolConvert(string xmlStr) { return xmlStr.Replace("&", "&").Replace("<", "<").Replace(">", ">").Replace("\'", "'").Replace("\"", """); }
C#創建簡單的XML文件
////// 創建Xml文件 /// 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"); } ////// 創建節點 /// /// xml文檔 /// Xml父節點 /// 節點名 /// 節點值 /// 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學習教程 時光出版社
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學習教程 時光出版社 2022-03-26
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學習教程 時光出版社
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序列化的屬性總結
原文鏈接:https://www.cnblogs.com/Can-daydayup/p/16036872.html
相關推薦
- 2023-05-06 Go語言中Slice常見陷阱與避免方法詳解_Golang
- 2022-11-30 使用jQuery實現簡單穿梭框方式_jquery
- 2023-04-02 linux?top命令基本實戰_linux shell
- 2022-05-07 Python?遞歸式實現二叉樹前序,中序,后序遍歷_python
- 2022-10-14 面試官:int(1) 和 int(10) 有什么區別?
- 2022-05-13 ffmpeg+pyqt5簡單實現一個抽幀可視化小工具
- 2021-11-15 Linux網絡設置之基礎操作命令詳解_Linux
- 2022-10-23 Android?Handler源碼深入探究_Android
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支