开源.NET下的XML数据库介绍及入门

 比如我这次遇到的。一个小得不能小的工具,本来用sqlite+XCode很快就可以搞定的东东,“领导”说非要用XML存储,那好吧。就用XML,虽然.NET操作XML很方便,但很好做。我的***反应是找一个C#操作XML文件的类,应该差不多了。没想到就发现了XML数据库这么个玩意,试用,初步还是不错的,虽然有些小问题,也很久没更新了。代码资料还是老样子,规矩看前面的博客说明,不在提示了。

XML Database初步介绍

XML Database是一套基于.NET 和 XML技术开发的数据库产品,开发者是博客园的陈希章。其定位是面向.NET开发平台的、小型的、面向对象的数据库,比较适合于本地数据缓存、嵌入式数据库应用的场景。上次更新日期是2011年了,没有仔细去研究源码,核心的程序集也才25K,所以够轻量级。那说说其基本特点,更新后的版本的说明没有找到,就看最老的版本的吧:

1.完全基于XML的存储。数据库的配置信息和对象数据、索引、日志全部是用XML格式保存的。这样的出发点主要是XML数据格式很易于阅读和传输,转换。

2.基于文件夹的数据存储。这个作者曾经有些犹豫,有时候也觉得没必要,但如果关系复杂点的对象,还是有用的。

3.完全基于.NET编写,结合了LINQ的语法。这个数据库引擎也可以算是一个所谓的嵌入式的数据库引擎吧,它是通过一个dll提供了全部的功能。目前提供的查询是基于LINQ to Object的,所有的操作都是面向对象的。

4.目前有的功能主要是数据库的创建、打开和关闭,以及面向对象的增删查改,简单的批处理和事务控制等。

简单入门例子

存储是面向对象的,对每一条数据,都会有一个GUID编号,可以去看生成的XML文件得知。平时我们要存储在数据库的对象,一般就是实体了,那看看我这个实体的简单结构:

  1. /// <summary>人脸数据</summary>   
  2.  public class Faces  
  3.  { 
  4.      #region 属性 
  5.      /// <summary>姓名</summary>        
  6.      public String Name { get; set; }     
  7.      /// <summary>年龄</summary> 
  8.      public Int32 Age { get; set; }            
  9.      /// <summary>性别</summary> 
  10.      public String Sex { get; set; }   
  11.      /// <summary>手机号码</summary>        
  12.      public String Tel { get; set; }    
  13.      /// <summary>图片位置</summary>       
  14.      public String Position { get; set; } 
  15.      /// <summary>图像的特征值,不支持存储数组类型,要转换才行</summary>       
  16.      public string Eigenvalue { get; set; } 
  17.      #endregion 
  18.  } 

值得注意的是,我试了一下,好像不支持存储数组结构,所以是数组的,要手动转换一下。比如这个特征值,是double[]数组,用的时候,读出来,要转换为double[]才能用。格式嘛,自己定。看基本操作:

  1. //数据库没有会自动创建 
  2.    using (XDatabase db = XDatabase.Open(Main.DbName)) 
  3.    {     
  4.        //然后循环将特征值和图像对应起来,添加到数据库 
  5.        for (int i = 0; i < 20; i++) 
  6.        { 
  7.            //添加图片信息 
  8.            Faces cut = new Faces(); 
  9.            cut.Name = Names[i]; 
  10.            cut.Sex = Sexs[i]; 
  11.            cut.Tel = Teles[i]; 
  12.            cut.Age = Ages[i]; 
  13.            cut.Position = fileNames[i]; 
  14.            //添加特征值 
  15.            cut.Eigenvalue = DoubleArrayToString (MeanB[i]); 
  16.            //保存到数据库 
  17.            db.Store(cut); 
  18.        } 
  19.    //查询,结果是IEnumerable<T>类型,可以用LINQ操作 
  20.        var t = db.Query<Faces>();      
  21.    } 

其实很简单,轻量级的操作就是保存和查询,更新,更新的操作很简单,和保存一样,内部会识别是新增的数据还是更新数据。查询的结果是IEnumerable<T>类型,所有可以很方便的使用LINQ来得到你所要的结果。

当然还可能有其他的一些功能,比如事务,我的工具太简陋,没有用上,可以研究下。

说明一下,不要也不要说功能有限,有时候我们的需求就这样,简单的可以就行,没必要搞那么复杂。OK,就算抛砖引玉吧,作者后来的更新也没有说明,如果使用,可以用Nuget来获取***的安装包,地址看下节。

相关资源

开源网址:http://xmldatabase.codeplex.com/

作者博客:http://www.cnblogs.com/chenxizhang/

Nuget地址:http://nuget.org/packages/XMLDatabase

原文链接:http://www.cnblogs.com/asxinyu/archive/2013/03/25/2980086.html

 

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/229606.html<

(0)
管理的头像管理
上一篇2025-04-18 20:34
下一篇 2025-04-18 20:36

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注