linq to xml 简单的增、删、改、查、保存xml文件操作

转自:http://www.cnblogs.com/zoro-zero/p/3983205.html

复制代码
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.IO;
using System.Xml;

namespace test
{
    public partial class xmlDemo : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        //使用XmlDocument创建xml文件
        protected void Button1_Click(object sender, EventArgs e)
        {
            string dirPath = Server.MapPath("/xml");

            DirectoryInfo dir = new DirectoryInfo(dirPath);

            if (!dir.Exists)
            {
                dir.Create();
            }

            //创建xml文件
            XmlDocument xdoc = new XmlDocument();

            //创建xml描述
            XmlDeclaration xdec = xdoc.CreateXmlDeclaration("1.0", "utf-8", null);
            xdoc.AppendChild(xdec);

            //创建xml跟节点

            XmlElement xroot = xdoc.CreateElement("persons");
            xdoc.AppendChild(xroot);

            //创建节点

            XmlElement xper = xdoc.CreateElement("person");
            xroot.AppendChild(xper);

            //对person节点设置属性
            xper.SetAttribute("id", "0001");
            
            //创建person节点下的子节点

            //person节点下创建name节点
            XmlElement xname = xdoc.CreateElement("name");
            xper.AppendChild(xname);

            XmlText textName = xdoc.CreateTextNode("test");
            xname.AppendChild(textName);


            //person节点下创建age节点
            XmlElement xage = xdoc.CreateElement("age");
            xper.AppendChild(xage);

            XmlText textAge = xdoc.CreateTextNode("20");
            xage.AppendChild(textAge);


            //person节点下创建sex节点
            XmlElement xsex = xdoc.CreateElement("sex");
            xper.AppendChild(xsex);

            XmlText textsex = xdoc.CreateTextNode("");
            xsex.AppendChild(textsex);


            //保存xml文件
            xdoc.Save(dirPath+"/"+"person.xml");


            Response.Write("创建xml文件成功");


        }

        //使用linq to xml创建xml文件
        protected void Button2_Click(object sender, EventArgs e)
        {
            string dirPath = Server.MapPath("/xml");

            DirectoryInfo dir = new DirectoryInfo(dirPath);

            if (!dir.Exists)
            {
                dir.Create();
            }

            XDocument xdoc = new XDocument();

            //使用XDocument 可以不需要document描述

            //创建跟节点
            XElement root = new XElement("root");
            //添加跟节点
            xdoc.Add(root);

            //创建person节点

            XElement per = new XElement("person");
            //添加person节点
            root.Add(per);

            //创建属性节点
            XAttribute xId = new XAttribute("id", "0002222");

            //name节点
            XElement name = new XElement("name", "test");
            //age节点
            XElement age = new XElement("age", "22");
            //sex节点
            XElement sex = new XElement("sex", "");

            //对person节点添加id属性 以及name sex age节点
            per.Add(xId,name, sex, age);


            //保存linq to xml 文件
            xdoc.Save(dirPath + "/" + "linqToXml.xml");

            Response.Write("linq to xml保存文件成功");
            


        }

        //使用linq to xml 批量添加person节点
        //xDocument.Root.Add()  批量添加
        protected void Button3_Click(object sender, EventArgs e)
        {
            string dirPath = Server.MapPath("/xml");

            DirectoryInfo dir = new DirectoryInfo(dirPath);

            if (!dir.Exists)
            {
                dir.Create();
            }

            XDocument xdoc = new XDocument();

            //使用XDocument 可以不需要document描述

            //创建跟节点

            XElement root = new XElement("root");

            xdoc.Add(root);

            Random r = new Random();

            for (int i = 1; i <= 100;i++ )
            {
                //person节点
                XElement per = new XElement("person");
                //id属性
                XAttribute xId = new XAttribute("id", i);
                //name
                XElement name = new XElement("name","test"+i);
                //age
                XElement age = new XElement("age",r.Next(18,30));
                //sex
                XElement sex = new XElement("sex", "男女"[r.Next(2)]);

                per.Add(xId, name, sex, age);

                xdoc.Root.Add(per);

            }

            //保存linq to xml 文件
            xdoc.Save(dirPath + "/" + "personList.xml");

            Response.Write("linq to xml批量添加成功");
        }

        //linq to xml 查找节点
        protected void Button5_Click(object sender, EventArgs e)
        {
            string path = Server.MapPath("/xml/personList.xml");

            XDocument xdoc = XDocument.Load(path);

            var query = xdoc.DescendantNodes().Where(

                    el => {

                        //将el转为XElement对象
                        XElement xe = el as XElement;
                        if (xe == null)
                        {
                            return false;
                        }

                        //找到age节点
                        XElement xAge = xe.Element("age");
                        //找到sex节点
                        XElement xSex = xe.Element("sex");
                        if(xAge !=null && xSex !=null)
                        {
                            int age = Convert.ToInt32(xAge.Value);
                            string sex = xSex.Value;
                            if (age >= 20 && age <= 25 && sex == "") 
                            {
                                return true;
                            }


                        }
                        return false;
                    }

                );

            //将查到的节点保存到xml文件中
            string savePath = Server.MapPath("/xml/search.xml");

            XDocument saveXdoc = new XDocument();

            XElement root = new XElement("root");

            saveXdoc.Add(root);

            root.Add(query);

            saveXdoc.Save(savePath);

            Response.Write("linq to xml查找成功");
        }

        //linq to xml 修改节点
        protected void Button4_Click(object sender, EventArgs e)
        {
            string path = Server.MapPath("/xml/personList.xml");
            XDocument xdoc = XDocument.Load(path);


            var query = from p in xdoc.Descendants("person")
                        where Convert.ToInt32(p.Attribute("id").Value) ==1
                        select p;

           var  first = query.FirstOrDefault();

           if (first != null)
            {

                XElement searchElement = first as XElement;

                XElement xname = searchElement.Element("name");
                xname.Value = "刘德华";

                xdoc.Save(path);

                Response.Write("linq to xml修改成功");

            }
        }

        //linq to xml 添加节点
        protected void Button6_Click(object sender, EventArgs e)
        {
            string path = Server.MapPath("/xml/personList.xml");

            XDocument xdoc = XDocument.Load(path);
            //找到根节点
            XElement root = xdoc.Element("root");

            XElement xPer = new XElement("person");

            XAttribute xid = new XAttribute("id", "9999");

            XElement xName = new XElement("name","张学友");

            XElement xSex = new XElement("sex","");

            XElement xAge = new XElement("age","99");

            root.Add(xPer);

            xPer.Add(xPer, xid, xName, xAge, xSex);

            xdoc.Save(path);

            Response.Write("添加成功");


        }

        //linq to xml 删除节点
        protected void Button7_Click(object sender, EventArgs e)
        {
            string path = Server.MapPath("/xml/personList.xml");
            XDocument xdoc = XDocument.Load(path);


            var query = from p in xdoc.Descendants("person")
                        where Convert.ToInt32(p.Attribute("id").Value) == 1
                        select p;

            var first = query.FirstOrDefault();

            if (first != null)
            {

                XElement searchElement = first as XElement;

                searchElement.Remove();

                xdoc.Save(path);

                Response.Write("linq to xml删除成功");

            }
        }


    }
}
复制代码

猜你喜欢

转载自blog.csdn.net/horserunningnostop/article/details/68950954