天天看點

linq to xml 簡單的增、删、改、查、儲存xml檔案操作

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删除成功");

            }
        }


    }
}