c#對XML文件的讀寫操做

      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入門有所收穫。
相關文章
相關標籤/搜索