C# XML基礎(chǔ)入門小結(jié)(XML文件內(nèi)容增刪改查清)
前言:
最近對接了一個第三方的項目,該項目的數(shù)據(jù)傳輸格式是XML。由于工作多年只有之前在醫(yī)療行業(yè)的時候有接觸過少量數(shù)據(jù)格式是XML的接口,之后就幾乎沒有接觸過了。因此對于XML這塊自己感覺還是有很多盲點和不足的,所以自己通過一些網(wǎng)上的資料總結(jié)了一下XML相關(guān)知識點。
什么是XML?
- XML是一種可擴展標(biāo)記語言(EXtensible Markup Language)。
- XML是一種很像HTML的標(biāo)記語言。
- XML的設(shè)計宗旨是傳輸數(shù)據(jù),而不是顯示數(shù)據(jù)。
- XML標(biāo)簽沒有被預(yù)定義。您需要自行定義標(biāo)簽。
- XML被設(shè)計為具有自我描述性。
- XML是 W3C 的推薦標(biāo)準(zhǔn)。
XML的優(yōu)缺點
XML的優(yōu)點
- 語法嚴(yán)謹(jǐn),格式統(tǒng)一,符合標(biāo)準(zhǔn)。
- 容易與其他系統(tǒng)進(jìn)行遠(yuǎn)程交互,數(shù)據(jù)共享比較方便。
XML的缺點
- 擴展性、彈性、易讀性均不佳。
- XML文件龐大,文件格式復(fù)雜,傳輸占帶寬。
- 服務(wù)器端和客戶端解析XML花費較多的資源和時間。
XML簡單示例
在線xml驗證工具:http://tools.jb51.net/code/xmlcodeformat
<?xml version="1.0" encoding="utf-8"?>
<books>
<book>
<author>追逐時光者</author>
<title>XML學(xué)習(xí)教程</title>
<publisher>時光出版社</publisher>
</book>
</books>XML中5個預(yù)定義的實體引用
| 轉(zhuǎn)義字符 | 符號 | 名稱 |
|---|---|---|
| & | & | 和號 |
| < | < | 小于 |
| > | > | 大于 |
| ' | ' | 省略號 |
| " | " | 引號 |
嚴(yán)格地講,在 XML 中僅有字符 "<"和"&" 是非法的。省略號、引號和大于號是合法的。這時,Xml有兩種解決方案來處理這種問題。
CDATA
轉(zhuǎn)義字符
C#把特殊符號轉(zhuǎn)換為轉(zhuǎn)義字符
/// <summary>
/// 特殊符號轉(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)建簡單的XML文件
/// <summary>
/// 創(chuàng)建Xml文件
/// </summary>
public void CreateXmlFile()
{
XmlDocument xmlDoc = new XmlDocument();
//創(chuàng)建類型聲明節(jié)點
XmlNode node = xmlDoc.CreateXmlDeclaration("1.0", "utf-8", "");
xmlDoc.AppendChild(node);
//創(chuàng)建Xml根節(jié)點
XmlNode root = xmlDoc.CreateElement("books");
xmlDoc.AppendChild(root);
XmlNode root1 = xmlDoc.CreateElement("book");
root.AppendChild(root1);
//創(chuàng)建子節(jié)點
CreateNode(xmlDoc, root1, "author", "追逐時光者");
CreateNode(xmlDoc, root1, "title", "XML學(xué)習(xí)教程");
CreateNode(xmlDoc, root1, "publisher", "時光出版社");
//將文件保存到指定位置
xmlDoc.Save("D://xmlSampleCreateFile.xml");
}
/// <summary>
/// 創(chuàng)建節(jié)點
/// </summary>
/// <param name="xmlDoc">xml文檔</param>
/// <param name="parentNode">Xml父節(jié)點</param>
/// <param name="name">節(jié)點名</param>
/// <param name="value">節(jié)點值</param>
///
public void CreateNode(XmlDocument xmlDoc, XmlNode parentNode, string name, string value)
{
//創(chuàng)建對應(yīng)Xml節(jié)點元素
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>追逐時光者</author>
<title>XML學(xué)習(xí)教程</title>
<publisher>時光出版社</publisher>
</book>
</books>C#在XML文件添加節(jié)點
這次我們是在上一次新建的XML文件中做操作,在book二級節(jié)點下添加一個新的節(jié)點名為publishdate(發(fā)布時間),該節(jié)點的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é)點的book節(jié)點
//創(chuàng)建一個新的Xml節(jié)點元素
XmlNode node = xmlDoc.CreateNode(XmlNodeType.Element, "publishdate", null);
node.InnerText = "2022-03-26";
root.AppendChild(node);//將創(chuàng)建的item子節(jié)點添加到items節(jié)點的尾部
xmlDoc.Save("D://AppendNodeFile.xml");//保存修改的Xml文件內(nèi)容
}添加節(jié)點成功后的XML文件內(nèi)容
<?xml version="1.0" encoding="utf-8"?>
<books>
<book>
<author>追逐時光者</author>
<title>XML學(xué)習(xí)教程</title>
<publisher>時光出版社</publisher>
<publishdate>2022-03-26</publishdate>
</book>
</books>C#修改XML文件節(jié)點的數(shù)據(jù)
這次我們是在第一次新建的XML文件中做操作,把在book二級節(jié)點下的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é)點
XmlNodeList xmlNodeList = xns.ChildNodes;//取出book節(jié)點下所有的子節(jié)點
foreach (XmlNode xmlNode in xmlNodeList)
{
XmlElement xmlElement = (XmlElement)xmlNode;//將節(jié)點轉(zhuǎn)換一下類型
if (xmlElement.Name=="author")//判斷該子節(jié)點是否是要查找的節(jié)點
{
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>時光出版社</publisher>
</book>
</books>C#刪除XML文件中的指定節(jié)點
這次我們是在第一次新建的XML文件中做操作,刪除author節(jié)點。
private static void DeleteXmlNode()
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("D://xmlSampleCreateFile.xml");//加載Xml文件
XmlNode xns = xmlDoc.SelectSingleNode("books/book");//查找要刪除的根節(jié)點
#region 刪除author節(jié)點
var delNode = xmlDoc.SelectSingleNode("books/book/" + "author");
xns.RemoveChild(delNode);
#endregion
xmlDoc.Save("D://DeleteXmlNode.xml");//保存操作后的Xml文件內(nèi)容
}C#清空指定XML節(jié)點數(shù)據(jù)
這次我們是在第一次新建的XML文件中做操作,清空author節(jié)點下的數(shù)據(jù)。
private static void ClearDataXmlNode()
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("D://xmlSampleCreateFile.xml");//加載Xml文件
XmlNode xns = xmlDoc.SelectSingleNode("books/book");//查找要刪除的根節(jié)點
#region 清空author節(jié)點下的數(shù)據(jù)
XmlNodeList xmlNodeList = xns.ChildNodes;//取出book節(jié)點下所有的子節(jié)點
foreach (XmlNode xmlNode in xmlNodeList)
{
XmlElement xmlElement = (XmlElement)xmlNode;//將節(jié)點轉(zhuǎn)換一下類型
if (xmlElement.Name == "author")//判斷該子節(jié)點是否是要查找的節(jié)點
{
//清空author節(jié)點下的數(shù)據(jù)
xmlElement.RemoveAll();//刪除該節(jié)點的全部內(nèi)容
}
}
#endregion
xmlDoc.Save("D://ClearDataXmlNode.xml");//保存操作后的Xml文件內(nèi)容
}學(xué)習(xí)參考資料
.NET中XML序列化和反序列化常用類和用來控制XML序列化的屬性總結(jié)
到此這篇關(guān)于C# XML基礎(chǔ)入門小結(jié)(XML文件內(nèi)容增刪改查清)的文章就介紹到這了,更多相關(guān)C# XML基礎(chǔ)入門內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#學(xué)習(xí)筆記- 隨機函數(shù)Random()的用法詳解
下面小編就為大家?guī)硪黄狢#學(xué)習(xí)筆記- 隨機函數(shù)Random()的用法詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-08-08
C#中BitmapImage與BitmapSource接口的區(qū)別對比小結(jié)
BitmapImage和BitmapSource都可以用于表示和顯示圖像,本文就來介紹一下C#中BitmapImage與BitmapSource接口的區(qū)別對比,具有一定的參考價值,感興趣的可以了解一下2024-03-03
C#調(diào)用dos窗口獲取相關(guān)信息的方法
這篇文章主要介紹了C#調(diào)用dos窗口獲取相關(guān)信息的方法,涉及C#調(diào)用dos窗口及進(jìn)程操作的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-08-08

