首页 > 学院 > 开发设计 > 正文

XML数据源快速开发框架——XmlFramwork

2019-11-17 02:41:52
字体:
来源:转载
供稿:网友

xml数据源快速开发框架——XmlFramwork

浪漫的周末从VEVb开始。话说,今天和往常的周末一样,韩君躲在被窝里用手机翻阅着园子里的珠玑。一篇《应用XML作为数据库的快速开发框架》的文章在韩君脑子里激起了一波球形闪电。想想上周中刚好完成的一个WinCE小项目,这波久久不能平息。韩君做了一个比马兄更艰难的决定,秒速穿戴衣裤后,开始了那第N次的亲密接触...

成果:

一个外传版的XML数据源快速开发框架:XmlFramwork。

image

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
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表