linq处理xml文件

有不明白的地方欢迎入群 347636249 探讨
using System;
using System.Linq;
using System.Xml.Linq;
using System.Collections.Generic;

namespace chongqing
{
	/// <summary>
	/// 视频下载到本地,相关信息处理
	/// </summary>
	public class LoadCourse : IDisposable
	{
		#region 实现接口
		/// <summary>
		/// 析构函数
		/// </summary>
		~LoadCourse()
		{
			Dispose(false);
		}
		public void Dispose()
		{
			Dispose(true);
			GC.SuppressFinalize(this);
		}
		protected virtual void Dispose(bool disposing)
		{
			if (!disposing)
				return;
		}
		#endregion

		public LoadCourse ()
		{

		}

		/// <summary>
		/// 初始化文件
		/// </summary>
		public static void InitializeXmlFile(string xmlpath)
		{
			XDocument doc = new XDocument (///创建XDocument类的实例
				new XDeclaration ("1.0", "utf-8", "yes"),///XML的声明,包括版本,编码,xml文件是否独立
				new XElement ("CourseInfo",null) ///添加根节点
			);
			///保存XML文件到指定地址
			doc.Save(xmlpath);
		}

		/// <summary>
		/// 1、创建 loadcourse.xml 文件,由函数 CreateXmlFile()完成  
		/// </summary>
		/// <param name="model">下载的视频信息model.</param>
		/// <remarks>调用之前先判断此文件是否存在</remarks>
		public void CreateXmlFile(string xmlpath, LoadCourseModel model)
		{
			XDocument doc = new XDocument (///创建XDocument类的实例
				                new XDeclaration ("1.0", "utf-8", "yes"),///XML的声明,包括版本,编码,xml文件是否独立
				                new XElement ("CourseInfo",                   ///添加根节点
					                new XElement ("Course",                ///添加一个节点
						                new XAttribute ("Course_Number", model.Course_Number),///添加属性 Course_Number
						                new XElement ("Course_Name", model.Course_Name), ///添加元素 Course_Name
										new XElement ("Load_LocalName", model.Load_LocalName), ///添加元素 Load_LocalName
						                new XElement ("Course_Byte", model.Course_Byte),///添加元素 Course_Byte
						                new XElement ("Load_DateTime", model.Load_DateTime)///添加元素 Load_DateTime
					                )
				                )
			                );
			///保存XML文件到指定地址
			doc.Save(xmlpath);
		}

		/// <summary>
		/// 2、添加元素
		/// </summary>
		/// <param name="xmlpath">XML文件的路径</param>
		public void AddXmlElement(string xmlpath, LoadCourseModel model)
		{
			///导入XML文件
			XElement xe = XElement.Load (xmlpath);

			///创建一个新节点
			XElement course = new XElement ("Course",
				                  new XAttribute ("Course_Number", model.Course_Number),///添加属性 Course_Number
				                  new XElement ("Course_Name", model.Course_Name), ///添加元素 Course_Name
				                  new XElement ("Load_LocalName", model.Load_LocalName), ///添加元素 Load_LocalName
				                  new XElement ("Course_Byte", model.Course_Byte),///添加元素 Course_Byte
				                  new XElement ("Load_DateTime", model.Load_DateTime)///添加元素 Load_DateTime
			                  );
			///添加节点到XML文件中,并保存
			xe.Add (course);

			///保存到XML文件中
			xe.Save (xmlpath);
		}

		/// <summary>
		///  3、修改XML文件的元素
		/// </summary>
		/// <param name="strElement">指定的修改视频id</param>
		public void ModifyXmlElement(string xmlpath, string strElement, LoadCourseModel model)
		{
			XElement xe = XElement.Load (xmlpath);
			///查询修改的元素
			IEnumerable<XElement> element = from e in xe.Elements ("Course")
			                                where e.Attribute ("Course_Number").Value == strElement
			                                select e;
			///修改元素
			if (element.Count () > 0) {
				XElement firstelement = element.First ();
				///设置新的属性
				firstelement.SetAttributeValue ("Course_Number", model.Course_Number);
				///替换成新的节点
				firstelement.ReplaceNodes (
					new XElement ("Course_Name", model.Course_Name),
					new XElement ("Load_LocalName", model.Load_LocalName),
					new XElement ("Course_Byte", model.Course_Byte),
					new XElement ("Load_DateTime", model.Load_DateTime)
				);
			}
			xe.Save (xmlpath);
		}

		/// <summary>
		/// 4、删除XML文件的元素
		/// </summary>
		/// <param name="strElement">指定删除视频的编号</param>
		public void DeleteXmlElement(string xmlpath, string strElement)
		{
			XElement xe = XElement.Load (xmlpath);
			///查询修改的元素
			IEnumerable<XElement> element = from e in xe.Elements ("Course")
			                                where e.Attribute ("Course_Number").Value == strElement
			                                select e;
			///删除元素
			if (element.Count () > 0) {
				XElement firstelement = element.First ();
				///删除此元素的所有节点和属性
				firstelement.RemoveAll ();
				///删除此元素的属性
				//firstelement.RemoveAttributes();
				///删除此元素的子节点
				//firstelement.RemoveNodes();
			}
			xe.Save (xmlpath);
		}

		/// <summary>
		/// 5、将XML文件中的属性更换成元素
		/// </summary>
		/// <param name="strAttribute">指定更换视频的编号属性</param>
		public void ConvertAttributeToElement(string xmlpath, string strAttribute)
		{
			XElement xe = XElement.Load (xmlpath);
			///查询更换的元素
			IEnumerable<XElement> element = from e in xe.Elements ("Course")
			                                where e.Attribute ("Course_Number").Value == strAttribute
			                                select e;
			///更换为元素
			if (element.Count () > 0) {
				XElement firstelement = element.First ();
				//获取第一个属性
				XAttribute attr = firstelement.FirstAttribute;
				//XAttribute attr = firstelement.Attribute("Course_Number");
				///将属性转换成元素
				firstelement.AddFirst (
					new XElement (attr.Name, attr.Value)//添加 Course_Number 元素
				);
				///删除属性
				firstelement.RemoveAttributes ();
			}
			xe.Save (xmlpath);
		}

		private static string LocalCourseXmlPath
		{
			get{ 
				var documents = Environment.GetFolderPath (Environment.SpecialFolder.MyDocuments);
				return System.IO.Path.Combine (documents, Utils.KeyCenter.Key_LoadCourseInfo);
			}
		}
		/// <summary>
		/// 6、是否存在元素
		/// </summary>
		/// <param name="strElement">指定的视频id</param>
		public static bool ExistElement(string strElement)
		{
			if (!System.IO.File.Exists (LocalCourseXmlPath)) {
				return false;
			}

			XElement xe = XElement.Load (LocalCourseXmlPath);
			///查询修改的元素
			IEnumerable<XElement> element = from e in xe.Elements ("Course")
			                                where e.Attribute ("Course_Number").Value == strElement
			                                select e;
			///修改元素
			return element.Count () > 0;
		}

		/// <summary>
		/// 获取所有下载过的视频信息
		/// </summary>
		public List<LoadCourseModel> GetLoadCourseList()
		{
			if (!System.IO.File.Exists (LocalCourseXmlPath)) {
				return null;
			}

			XElement xe = XElement.Load (LocalCourseXmlPath);
			///查询修改的元素
			var q = from e in xe.Elements ("Course")
			        select new LoadCourseModel {
				Course_Number = e.Attribute ("Course_Number").Value,
				Course_Name = e.Element ("Course_Name").Value,
				Load_LocalName = e.Element ("Load_LocalName").Value,
				Course_Byte = e.Element ("Course_Byte").Value,
				Load_DateTime = e.Element ("Load_DateTime").Value
			};

			return q.ToList ();
		}

		//...

	}
}

你可能感兴趣的:(LINQ,xml.linq)