浪漫的周末从VEVb开始。话说,今天和往常的周末一样,韩君躲在被窝里用手机翻阅着园子里的珠玑。一篇《应用XML作为数据库的快速开发框架》的文章在韩君脑子里激起了一波球形闪电。想想上周中刚好完成的一个WinCE小项目,这波久久不能平息。韩君做了一个比马兄更艰难的决定,秒速穿戴衣裤后,开始了那第N次的亲密接触...
一个外传版的XML数据源快速开发框架:XmlFramwork。
PathRoute:路由XML数据文件路径;
List<T>:XML实体类的泛型集合,对应XML文档;
ListExtend:为List<T>扩展将实体类集合序列化为XML文档及将XML文档反序列化为实体类集合的方法;
XmlEntity:XML实体类的基类,定义了一个Guid类型的属性(ID);
XmlEntityPRocess:对Xml文档进行增、删、改、查等处理。
PathRoute.cs
/*
类:PathRoute
描述:路由XML数据文件路径
编 码 人:韩兆新 日期:2014年12月21日
修改记录:
*/
using System.Configuration;
using System.IO;
using System.Reflection;
namespace XmlFramwork
{
static class PathRoute
{
public static readonly string DataFolder = ConfigurationManager.AppSettings["DataFolder"];
public static string GetXmlPath<T>()
{
string dataFolder = DataFolder;
if (string.IsNullOrEmpty(dataFolder))
{
dataFolder = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "Data");
}
return Path.ChangeExtension(Path.Combine(dataFolder, Path.Combine(typeof(T).FullName.Split('.'))), ".xml");
}
}
}
ListExtend.cs
/*
类:ListExtend
描述:为List<T>扩展加载XML文档和保存为XML文档的方法
编 码 人:韩兆新 日期:2014年12月21日
修改记录:
*/
using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization;
namespace XmlFramwork
{
public static class ListExtend
{
/// <summary>
/// 加载XML文档返回List集合
/// </summary>
/// <typeparam name="TSource"></typeparam>
/// <param name="source"></param>
/// <returns></returns>
public static List<TSource> Load<TSource>(this List<TSource> source)
{
string fileName = PathRoute.GetXmlPath<TSource>();
if (File.Exists(fileName))
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(List<TSource>));
using (Stream reader = new FileStream(fileName, FileMode.Open, Fileaccess.Read))
{
return xmlSerializer.Deserialize(reader) as List<TSource>;
}
}
else
{
return new List<TSource>();
}
}
/// <summary>
/// 将list集合保存为XML文档
/// </summary>
/// <typeparam name="TSource"></typeparam>
/// <param name="source"></param>
public static void Save<TSource>(this List<TSource> source)
{
string fileName = PathRoute.GetXmlPath<TSource>();
FileInfo fileInfo = new FileInfo(fileName);
DirectoryInfo directoryInfo = fileInfo.Directory;
if (!directoryInfo.Exists)
{
directoryInfo.Create();
}
XmlSerializer xmlSerializer = new XmlSerializer(source.GetType());
using (Stream writer = new FileStream(fileName, FileMode.Create, FileAccess.Write))
{
xmlSerializer.Serialize(writer, source);
}
}
}
}
XmlEntity.cs
/*
类:XmlEntity
描述:Xml实体类基类
编 码 人:韩兆新 日期:2014年12月21日
修改记录:
*/
using System;
namespace XmlFramwork
{
public class XmlEntity
{
public Guid ID{ set; get;}
}
}
XmlEntityProcess.cs
/*
类:XmlEntityProcess〈T〉
描述:对Xml文档进行增、删、改、查等处理
编 码 人:韩兆新 日期:2014年12月21日
修改记录:
*/
using System;
using System.Collections.Generic;
using System.Linq;
namespace XmlFramwork
{
public static class XmlEntityProcess<T> where T : XmlEntity
{
private static string lastErrMsg;
/// <summary>
/// 获取最后一次错误的信息
/// </summary>
/// <returns></returns>
public static string GetLastErrMsg()
{
return lastErrMsg;
}
/// <summary>
/// 插入XML实体类对象
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public static bool Insert(T entity)
{
try
{
List<T> entityList = new List<T>().Load();
entity.ID = Guid.NewGuid();
entityList.Add(entity);
entityList.Save();
return true;
}
catch (Exception ex)
{
lastErrMsg = ex.Message;
return false;
}
}
/// <summary>
/// 根据ID删除XML实体类对象
/// </summary>
/// <pa
新闻热点
疑难解答