1. 程式人生 > >.NET 對 XML 進行創建,增加,刪除,修改操作整理

.NET 對 XML 進行創建,增加,刪除,修改操作整理

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轉義字符

&lt;

<

小於

&gt;

>

大於

&amp;

&

和號

&apos;

單引號

&quot;

"

引號

最後分享一下調用方法的代碼部分:

        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 進行創建,增加,刪除,修改操作整理