前端之家收集整理的这篇文章主要介绍了
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",///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",///添加属性 Course_Number
new XElement ("Course_Name",///添加元素 Course_Name
new XElement ("Load_LocalName",///添加元素 Load_LocalName
new XElement ("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",new XElement ("Load_LocalName",new XElement ("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 ();
}
//...
}
}