LinqToXML

http://www.cnblogs.com/luckdv/articles/1728088.html?login=1

http://de.cel.blog.163.com/blog/static/5145123620119983945167/

Data.xml:

<Students>

<Student Id ="1">

<Name>张三</Name>

<Address>张三家地址</Address>

</Student>

<Student Id ="2">

<Name>李四</Name>

<Address>李四家地址</Address>

</Student>

</Students>

 

XMLHelper:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Xml.Linq;

using StudentManager.Models;



namespace StudentManager

{

    public class XmlHelper

    {

        private XElement Root;



        private List<Student> _StuList;

        public List<Student> StuList

        {

            get { return _StuList; }

            set { _StuList = value; }

        }

        string path = HttpRuntime.AppDomainAppPath.ToString() + "App_Data\\Data.xml";



        public XmlHelper()

        {

            Root = Load();

        }

        public XElement Load()

        {

            XElement root = XElement.Load(path);

            return root;

        }

        public List<Student> GetAllStudents()

        {

            List<Student> list = new List<Student>();

            var students = Root.Elements("Student");

            foreach (var stu in students)

            {

                Student s = new Student();

                s.Id = Convert.ToInt32(stu.Attribute("Id").Value);

                s.Name = stu.Element("Name").Value;

                s.Address = stu.Element("Address").Value;

                list.Add(s);

            }

            StuList = list;          



            return list;

        }

        public Student GetStudentById(int id)

        {

            Student stu = new Student();



            IEnumerable<XAttribute> es = Root.Elements("Student").Attributes("Id");



            //XElement el = es.FirstOrDefault(o => o.Value == id.ToString()).Parent;

            

            

            XElement e = Root.Elements("Student").Single(o => 

            {

                bool flag = o.Attribute("Id").Value == id.ToString();

                if (flag)

                {                    

                    stu.Id = Convert.ToInt32(o.Attribute("Id").Value);

                    stu.Name = o.Element("Name").Value;

                    stu.Address = o.Element("Address").Value;

                }

                return flag;

            });            



            return stu;

        }

        public void DeleteStudentById(int id)

        {

            XElement t = (from stu in Root.Elements("Student")

                    where stu.Attribute("Id").Value == id.ToString()

                    select stu).Single() as XElement;

            t.Remove();           

            Root.Save(path);

        }

        public void UpdateStudent(Student stu)

        {

            //XElement e = Root.Elements("Student").Single(o => o.Attribute("Id").Value == stu.Id.ToString());

            //e.Element("Name").SetValue(stu.Name);

            //e.Element("Address").SetValue(stu.Address);

            //e.ReplaceWith(new XElement(stu.Name,stu.Address));

            Root.Elements("Student").Single(o => o.Attribute("Id").Value == stu.Id.ToString())

                .ReplaceWith(new XElement("Student",new XAttribute("Id",stu.Id),

                    new XElement("Name",stu.Name),

                    new XElement("Address",stu.Address)));

            Root.Save(path);

        }

        public void CreateStudent(Student stu)

        {

            int a = GetMaxIndex();

            stu.Id = a;



             XElement e = Root.Elements("Student").Last();

             e.AddAfterSelf(new XElement("Student"

                 ,new XAttribute("Id",stu.Id)

                 ,new XElement("Name",stu.Name)

                 ,new XElement("Address",stu.Address)));

            Root.Save(path);

        }



        private int GetMaxIndex()

        {

            //int temp = 0;

            int maxIndex = Root.Elements("Student").Max(o => Convert.ToInt32(o.Attribute("Id").Value));

            //Root.Elements("Student").Max((o) =>

            //{

            //    temp = (int)o.Attribute("Id");

            //    return temp;

            //});



            return ++maxIndex;

        }

    }

}

 

你可能感兴趣的:(LINQ)