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;
        }
    }
}
原文地址:https://www.cnblogs.com/pnljs/p/3724602.html