XML使用与总结

xml是一种比较方便的数据储存方式,它适用于小数据的存储。最常见的适用地方莫过于各种web.config与app.config了。
 
一、创建一个简单的xml路径
 public static string xmlPath = AppDomain.CurrentDomain.BaseDirectory + "test.xml";
二、创建一个xml文件,并添加一级数据【只有一级数据】
        public void Set()
        {
            try
            {
                XmlDocument xmldoc = new XmlDocument();
                if (!File.Exists(xmlPath))
                {
                    //不关闭会有错误提示,被另一个线程占用
                    File.Create(xmlPath).Close();

                    //创建root节点
                    XmlElement root = xmldoc.CreateElement("Root");
                    xmldoc.AppendChild(root);
                    xmldoc.Save(xmlPath);
                }

                //加载xml文件
                xmldoc.Load(xmlPath);
                var rootElement = xmldoc.DocumentElement;

                //创建子节点
                var childnode = xmldoc.CreateElement("Phone");
                //设置属性
                childnode.SetAttribute("Name", "IPhone 6s");
                childnode.SetAttribute("BackGround", "银白色 玫瑰色 土豪金");
                //设置内容
                childnode.InnerText = "6s 已经是淘汰产品了";

                //追加到Root节点
                rootElement.AppendChild(childnode);
                //保存XML
                xmldoc.Save(xmlPath);

            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }

执行结果,执行了3次,每次添加一些属性

<Root>
  <Phone Name="IPhone 6s" />
  <Phone Name="IPhone 6s">6s 已经是淘汰产品了</Phone>
  <Phone Name="IPhone 6s" BackGround="银白色 玫瑰色 土豪金">6s 已经是淘汰产品了</Phone>
</Root>

 三、创建有2级数据的xml文件,一级节点的名字最好保持一致,否则查询时有困难。

        public void Set()
        {
            try
            {
                XmlDocument xmldoc = new XmlDocument();
                if (!File.Exists(xmlPath))
                {
                    //不关闭会有错误提示,被另一个线程占用
                    File.Create(xmlPath).Close();

                    //创建root节点
                    XmlElement root = xmldoc.CreateElement("Root");
                    xmldoc.AppendChild(root);
                    xmldoc.Save(xmlPath);
                }

                //加载xml文件
                xmldoc.Load(xmlPath);
                var rootElement = xmldoc.DocumentElement;

                //创建一级节点
                var childnode = xmldoc.CreateElement("HuaWeiPhone");
                childnode.SetAttribute("Name", "华为手机");

                //创建二级节点
                var hwbg = xmldoc.CreateElement("BackGround");
                hwbg.SetAttribute("Description", "颜色");
                hwbg.InnerText = "白色 黑色 玫瑰色 金色";
                childnode.AppendChild(hwbg);

                //创建二级节点
                var hwprice = xmldoc.CreateElement("Price");
                hwprice.SetAttribute("Description", "价格");
                hwprice.InnerText = "2000";
                childnode.AppendChild(hwprice);
                //追加到Root节点
                rootElement.AppendChild(childnode);


                //创建一级节点
                var childnode2 = xmldoc.CreateElement("XiaoMiPhone");
                childnode2.SetAttribute("Name", "小米手机");
                //创建二级节点
                var hwbg2 = xmldoc.CreateElement("BackGround");
                hwbg2.SetAttribute("Description", "颜色");
                hwbg2.InnerText = "白色 黑色 ";
                childnode2.AppendChild(hwbg2);

                //创建二级节点
                var hwprice2 = xmldoc.CreateElement("Price");
                hwprice2.SetAttribute("Description", "价格");
                hwprice2.InnerText = "1500";
                childnode2.AppendChild(hwprice2);


                //追加到Root节点
                rootElement.AppendChild(childnode2);
                //保存XML
                xmldoc.Save(xmlPath);

            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }

xml文件为:

<Root>
  <HuaWeiPhone Name="华为手机">
    <BackGround Description="颜色">白色 黑色 玫瑰色 金色</BackGround>
    <Price Description="价格">2000</Price>
  </HuaWeiPhone>
  <XiaoMiPhone Name="小米手机">
    <BackGround Description="颜色">白色 黑色 </BackGround>
    <Price Description="价格">1500</Price>
  </XiaoMiPhone>
</Root>

四、清理全部的xml数据

        public void Delete()
        {
            try
            {
                if (!File.Exists(xmlPath)) return;
                var xmldoc = new XmlDocument();
                xmldoc.Load(xmlPath);
                XmlNodeList xn = xmldoc.GetElementsByTagName("Root");
                if(xn?.Count<=0)return;

                //加载root节点
                var rootElement = xmldoc.DocumentElement;
                rootElement.RemoveAll();
                xmldoc.AppendChild(rootElement);
                xmldoc.Save(xmlPath);

            }
            catch (Exception e)
            {
            }
        }

五、根据节点名字,清理某一条数据

        public void DeleteByName(string name = "HuaWeiPhone")
        {
            try
            {
                if (!File.Exists(xmlPath)) return;

                XElement root = XElement.Load(xmlPath);
                var element = root.Element(name);
                element.Remove();
                root.Save(xmlPath);

            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }

 六、获取数据,根据某一个节点查询

                XmlDocument xmldoc = new XmlDocument();
                //加载xml文件
                xmldoc.Load(xmlPath);

                //方法一、根据节点名字获取节点信息
                XmlNode xmlNode = xmldoc.SelectSingleNode("Root/XiaoMiPhone");//XiaoMiPhone一级节点名字
                //该节点的属性
                var name = xmlNode.Attributes["Name"].Value;
                XmlNodeList childNodes = xmlNode.ChildNodes;
                foreach (XmlNode item in childNodes)
                {
                    //节点属性
                    var bgdescription = item.Attributes["Description"].Value;
                    //节点内容
                    var desTxt = item.InnerText;
                    //节点名字
                    var nodeName = item.Name;
                }

 七、遍历数据,xml数据如下

<Root>
  <Phone Name="Oppo手机">
    <BackGround Description="颜色">白色 黑色 玫瑰色 金色</BackGround>
    <Price Description="价格">2000</Price>
  </Phone>
  <Phone Name="Vivo手机">
    <BackGround Description="颜色">白色 黑色 </BackGround>
    <Price Description="价格">1500</Price>
  </Phone>
  <Phone Name="小米手机">
    <BackGround Description="颜色">白色 黑色 </BackGround>
    <Price Description="价格">1800</Price>
  </Phone>
  <Phone Name="锤子手机">
    <BackGround Description="颜色">银色 黑色 酒红 金色 </BackGround>
    <Price Description="价格">2200</Price>
  </Phone>
</Root>

 获取xml数据的方法

可以根据根据节点的名字查询数据,要是输入一级节点,就是查询全部的,要是输入二级节点怎么会获取所有二级节点的该节点数据
XmlNodeList xmlNodeList = xmldoc.SelectNodes("Root/Phone/BackGround");
        public void Get()
        {
            try
            {
                XmlDocument xmldoc = new XmlDocument();
                //加载xml文件
                xmldoc.Load(xmlPath);

                //查询全部数据
                XmlNodeList xmlNodeList = xmldoc.SelectNodes("Root/Phone");
                if (xmlNodeList == null || xmlNodeList.Count <= 0) return;

                foreach (XmlNode item in xmlNodeList)
                {
                    //节点属性
                    var bgdescription = item.Attributes["Name"].Value;
                    foreach (XmlNode citem in item.ChildNodes)
                    {
                        var bgDes = citem.Attributes["Description"].Value;
                        //节点内容
                        var desTxt = citem.InnerText;
                        //节点名字
                        var nodeName = citem.Name;
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }
原文地址:https://www.cnblogs.com/xiaoyaodijun/p/3945882.html