XML(eXtensible Markup Language)即可擴展標記語言。不一樣於數據庫的數據存儲,xml並不在於能存儲多大容量的數據。而在於它能將一些譬如配置信息結構化的存儲起來,方便程序讀取使用或顯示。目的並不在乎存儲上。因此它適用於存儲結構化的數據信息。這是它的長處。舉個簡單的例子,好比對於web開發的配置信息,就可使用xml文件存儲這些數據。當程序運行的時候就能夠讀取了。由於是結構化存儲的,讀取過程思路也會很清晰。固然啦,你把數據存到數據庫裏或者文本文件裏。也能夠啊。可是前者有點大材小用,還須要建表。後者沒有一個清晰的邏輯結構。讀取後再作處理會變得十分麻煩。xml就很好的解決了這一點。node
樓主也是第一次使用xml文件。以爲用起來還不錯,故分享之。因爲掌握不是很深,樓主只是對xml文件的寫入和讀取作介紹。web
1、寫數據到xml文件數據庫
xml文件以下;c#
--我將數據庫兩張表之間哪些字段是關聯的,進行了記錄,而後寫入xml文件。方便之後兩張表數據互相導入。 <Relationship><!--根節點--> <tableRelationship><!--表關係--> <basicInfo><!--基本信息--> <sourDB>SourTest</sourDB><!--源數據庫名稱--> <DesDB>DesTest</DesDB><!--目的數據庫名稱--> <sourTb>wx_dict_dept</sourTb><!--源數據庫的一張表--> <DesTb>hos_dic_dept</DesTb><!--目的數據庫的一張表--> </basicInfo> <fieldRelationship><!--表與表之間的關聯的字段關係--> <fieldName>OrgId->org_id</fieldName><!--源表中的orgId字段和目的表中org_id字段綁定。下同。--> <fieldName>DeptCode->dept_code</fieldName> <fieldName>DeptName->dept_name</fieldName> <fieldName>DeptAddress->dept_address</fieldName> <fieldName>Intro->dept_intro</fieldName> </fieldRelationship> </tableRelationship> </Relationship>
//創建表關係。寫入xml文件 public void AddTableRelationship(List<string> T, List<string> basicinfo) { XmlDocument xml = new XmlDocument(); XmlNode root;//生成根節點 if (File.Exists("tableRelationship.xml")) { xml.Load("tableRelationship.xml");//加載xml文件 } root = xml.SelectSingleNode("Relationship"); //XmlElement root= xml.CreateElement("Relationship");//若是是不存在xml文件,就採起這樣的方式。 //xml.AppendChild(root); XmlElement tableRelationship = xml.CreateElement("tableRelationship");//建立一個叫tableRelationship的節點 root.AppendChild(tableRelationship);//讓其成爲根節點的孩子節點。後面的同理可得。以此來構建一個數據結構,便於後期存儲結構化數據。 XmlElement database = xml.CreateElement("basicInfo"); tableRelationship.AppendChild(database); XmlElement sourDB = xml.CreateElement("sourDB"); sourDB.InnerText = basicinfo[0];//對節點寫入內容. database.AppendChild(sourDB); XmlElement DesDB = xml.CreateElement("DesDB"); DesDB.InnerText = basicinfo[1]; database.AppendChild(DesDB); XmlElement SourTb = xml.CreateElement("sourTb"); SourTb.InnerText = basicinfo[2]; database.AppendChild(SourTb); XmlElement DesTb = xml.CreateElement("DesTb"); DesTb.InnerText = basicinfo[3]; database.AppendChild(DesTb); XmlElement fieldRelationship = xml.CreateElement("fieldRelationship"); tableRelationship.AppendChild(fieldRelationship); foreach (var item in T)//循環寫入字段關係 { XmlElement fieldName = xml.CreateElement("fieldName"); fieldName.InnerText = item; fieldRelationship.AppendChild(fieldName); } xml.Save(@"tableRelationship.xml");//保存便可。這樣數據就按照構造好的結構,寫入xml文件裏了。 }
以上代碼親測。請耐心看,相信你會理解。理解了也就不能實現了。數據結構
2、讀取xml文件less
//讀取xml文件,獲取表關係 public List<tablerelationship> GetTableRelationship() { List<tablerelationship> list = new List<tablerelationship>(); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load("tableRelationship.xml"); //加載xml文件 XmlNode xn = xmlDoc.SelectSingleNode("Relationship"); XmlNodeList xnl = xn.ChildNodes;//獲得根節點的孩子節點。即全部的tableRelationship節點 foreach (XmlNode xnf in xnl) { XmlElement xe = (XmlElement)xnf; XmlNodeList xnf1 = xe.ChildNodes;//獲得tableRelationship節點的孩子節點。即database 和 fieldRelationship int temp = 0; tablerelationship tl = new tablerelationship(); foreach (XmlNode xn2 in xnf1) { //Console.WriteLine(xn2.InnerText);//顯示子節點點文本 temp++; XmlElement xnf2_1 = (XmlElement)xn2; if (temp == 1) { foreach (XmlNode xn3 in xnf2_1) { tl.basicinfo.Add(xn3.InnerText);//遍歷全部的basicinfo裏的內容 } } if (temp == 2) { foreach (XmlNode xn3 in xnf2_1) { tl.filedRelationship.Add(xn3.InnerText);//遍歷全部的fieldRelationship的內容。 } } } list.Add(tl); } return list; }
3、修改和刪除xml文件的節點信息spa
//修改表關係,寫入xml文件 public void UpdataTableRelationship(List<string> basicinfo,List<string> relation) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(@"tableRelationship.xml"); //加載xml文件 //獲取根節點的全部子節點 XmlNodeList nodeList = xmlDoc.SelectSingleNode("Relationship").ChildNodes;//獲取全部的關係表 //遍歷全部子節點 foreach (XmlNode xn in nodeList) { XmlElement xe = (XmlElement)xn; //將子節點類型轉換爲XmlElement類型 XmlNodeList nls = xe.ChildNodes;//獲得tableRelationship節點中的(basicinfo節點和fieldRelationship節點) int temp = 0; bool f = false; foreach (XmlNode xn1 in nls)//遍歷 { temp++; bool flag = false; XmlElement xe2 = (XmlElement)xn1; //轉換類型 if (temp%2 ==1) { //匹配信息,若不是我要修改的表關係就continue int x = 0; foreach (XmlNode xn3 in xe2)//遍歷basicinfo節點的內容 { if (basicinfo[x] == xn3.InnerText) { x++; } else { flag = true; break; } if (x == 4) { f = true; flag= true; } } if (flag == true) { continue; } } if (f) { xe2.RemoveAll();//刪除fieldRelationship的內容 if (relation.Count == 0) { //刪除一個表關係節點 XmlNode xx = xe2.ParentNode; xx.ParentNode.RemoveChild(xx);//若是兩張表的關係已經不存在了,則要刪除這個節點即tableRelationship節點 } else { foreach (var item in relation) { XmlElement fieldName = xmlDoc.CreateElement("fieldName"); fieldName.InnerText = item;//將修改信息從新寫入fieldRelationship節點 xe2.AppendChild(fieldName); } } goto less; } } } less: xmlDoc.Save(@"tableRelationship.xml");//保存。 }樓主因爲直接重本身的一個項目裏面拖過來的代碼,全部代碼裏帶有其餘邏輯。致使舉得例子有點複雜。可是隻要你認真看一遍,相信你會理解的。最後祝你對xml入門有所收穫。