.NET 對 XML 進行創建,增加,刪除,修改操作整理
阿新 • • 發佈:2017-12-14
res add post 做了 引用 nbsp order protected png
前言:
最近做了一個項目,程序A在一個服務器程序B在另一臺服務器,然而主程序A需要訪問程序B的圖片集文件夾下載到本服務器上,為了防止多次對Web Services進行調用,在主程序A中創建一個XML文件用於記錄圖片集中的某張圖片是否下載過,如果下載就不需調用,沒下載就需要調用服務。我也是枚小菜鳥,之前重來沒寫過XML文件這一塊,於是翻書(C# 高級編程 第10版 Christian Nagel著)上網查資料,終於整理出來一套自己能用得上對XML讀寫等操作的筆記。為了學習和分享決定放在自己的博客中,以後遇到類似問題可以進行鞏固,如果那裏寫的有誤希望讀者留言加以改正,接下來看我實現的步驟。
需要引用的命名空間:
using System.IO; using System.Xml;
1.創建XML文件
private void createXml(string xmlPath) //創建train的xml文件 { if (!File.Exists(xmlPath)) //判斷是否創建過xml文件 { XmlDocument doc = new XmlDocument(); doc.LoadXml("<?xml version=‘1.0‘ encoding=‘gb2312‘ ?>" + "<train>" + "</train>"); doc.Save(xmlPath); } }
2.插入元素
private void addXmlNode(string BatchId, string BatchName, string BatchNo,string xmlPath) //增加節點 (培訓批次id,培訓批次名稱,圖片編號集合,XML路徑){ XmlDocument xmldoc = new XmlDocument(); //實例一個xml文件 xmldoc.Load(xmlPath); //讀取xml文件 XmlNode train = xmldoc.SelectSingleNode("train"); //查找train XmlElement el = xmldoc.CreateElement("trainbatch"); //創建一個trainbatch el.SetAttribute("Name", BatchName); //添加屬性 XmlElement elBatchId = xmldoc.CreateElement("BatchId"); //創建<trainbatch>節點的第一個下級節點 elBatchId.InnerText = BatchId; //賦值 el.AppendChild(elBatchId); //追加到trainbatch下 XmlElement elBatchName = xmldoc.CreateElement("BatchName"); elBatchName.InnerText = BatchName; el.AppendChild(elBatchName); XmlElement elBatchNo = xmldoc.CreateElement("BatchNo"); //創建<trainbatch>節點的第二個下級節點 elBatchNo.InnerText = BatchNo; //賦值 el.AppendChild(elBatchNo); //追加到trainbatch下 train.AppendChild(el); //所有添加元素追加到根目錄下 xmldoc.Save(xmlPath); }
3.修改第一個trainbatch節點下的BatchNo的值
private void updateXmlNode(string BatchId, string BatchNo,string xmlPath) //修改xml文件 (培訓批次id,將要修改的圖片編號集合,XML路徑) { XmlDocument xmldoc = new XmlDocument(); xmldoc.Load(xmlPath); XmlNodeList titleNodes = xmldoc.SelectSingleNode("train").ChildNodes; //獲取train下一層的節點 foreach (XmlNode node in titleNodes) //循環所有trainbatch節點 { XmlElement el = (XmlElement)node.ChildNodes[0]; //獲取第一個節點值 if (el.InnerText == BatchId) //判斷第一個trainbatch的id是否等於將要修改的id { node.ChildNodes[2].InnerText = BatchNo; //給第三個節點賦值 xmldoc.Save(xmlPath); //保存(不要忘記這步驟哦) break; } } }
4.獲取第一個trainbatch節點下的BatchNo值
private string getXmlNodeValue(string BatchId,string xmlPath) //獲取某次培訓是否記錄在xml { XmlDocument xmldoc = new XmlDocument(); //實例化XML文檔 xmldoc.Load(xmlPath); //加載將要打開的文檔 string result = ""; XmlNodeList titleNodes = xmldoc.SelectSingleNode("train").ChildNodes; //獲取train下一層的節點 foreach (XmlNode node in titleNodes) //循環所有的trainbatch節點 { XmlElement el = (XmlElement)node.ChildNodes[0]; //獲取trainbatch下的第一個節點元素 if (el.InnerText == BatchId) { result = node.ChildNodes[2].InnerText.ToString(); //返回trainbatch下的第三個節點元素 return result; } } return result; }
5.根據條件刪除trainbatch節點
private void deleteXmlNode(string BatchName, string xmlPath) //刪除某個節點元素 { XmlDocument xmldoc = new XmlDocument(); xmldoc.Load(xmlPath); XmlNodeList titleNodes = xmldoc.SelectSingleNode("train").ChildNodes; //獲取train下一層的節點 foreach (XmlNode node in titleNodes) { XmlElement el = (XmlElement)node; if (el.GetAttribute("Name") == BatchName) //el.GetAttribute 獲取trainbatch屬性 { el.RemoveAll(); //刪除當前元素和所有子元素 xmldoc.Save(xmlPath); break; } } }
6.XML轉義字符
< |
< |
小於 |
> |
> |
大於 |
& |
& |
和號 |
' |
‘ |
單引號 |
" |
" |
引號 |
最後分享一下調用方法的代碼部分:
protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { string xmlPath = Server.MapPath("TestXml.xml"); //XML路徑地址 createXml(xmlPath); //創建XML文件 addXmlNode("1", "ASP.NET培訓第一期", "123,134,454,789,454,315,456", xmlPath); //插入第一個節點 addXmlNode("2", "ASP.NET培訓第二期", "0123,0134,0454,0789,0454,0315,0456", xmlPath); //插入第二個節點 addXmlNode("3", "ASP.NET培訓第三期", "0123,0134,0454,0789,0454,0315,0456", xmlPath); //插入第三個節點 addXmlNode("4", "ASP.NET培訓第四期", "0123,0134,0454,0789,0454,0315,0456", xmlPath); //插入第四個節點 string result = getXmlNodeValue("1", xmlPath); //獲取節點值 updateXmlNode("1", "0123,0134,0454,0789,0454,0315,0456", xmlPath); //修改節點值 deleteXmlNode("ASP.NET培訓第二期", xmlPath); //刪除節點 } }
.NET 對 XML 進行創建,增加,刪除,修改操作整理