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入门有所收获。
相关文章
相关标签/搜索