CYQ.Data 轻量数据层之路 V3.0版本发布-Xml绝对杀手(三十二)

简介:

前言:

复制代码
继正式发布V2.0到现在,已30来天了,一直静悄悄的都没发布什么版本

中间仅有插播了一下:CYQ.Data 轻量数据层之路 V2.5 抢先体验版本功能说明演示 (二十九)  

只因最近花了很多时间在重构一个以前的博客,目前已完成其基础功能,不日将发布相关文章。

提前预览网址:http://www.cyqdata.com/
复制代码

 

 

本次版本升级内容大体说明

1 :Access应用调整
2 :修正对:uniqueidentifier、ntext、text、Image等几个类型的应用。
3 :扩展缓存类CacheManage方法
4 :本次重点,增加CYQ.Data.Xml名称空间,简化xml操作。
其它:内部小调整N多小代码,就略过了......

 

 以下针对更新进说明

 

 一:Access应用调整

 1:默认关闭事务:Access一次Open只允许执行一条语句。

 2:处理DateTime类型:默认需要转成Date类型才能正确提交。

 3:数据库链接字符串处理虚拟目录相对路径:

 Access配置文件链接可写成:

< add  name ="Conn"  connectionString ="Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0}"  providerName ="System.Data.OleDb" />
< add  key ="AccessDbNameForWeb"  value ="myspace.mdb" />

 

 4:修正自定义视图语句查询语句bug:由于未设置表名,查询之后返回记录总数为0。

 

 二:修正特殊字段类型处理

 1:默认uniqueidentifier、ntext、ntext、Image等字段长度为16,在提交时会被截断,本次修正字段初始并对Image类型进行特殊处理。

 

 三:缓存类调整

 1:增加Add重载方法,允许传入文件依赖路径及缓存时间

 2:增加SetChange、GetHasChanged方法,允许设置及获取缓存对象是否改变。

 

 四:增加CYQ.Data.Xml名称空间,增加5个类

 1:抽象基类:XmlBase-》处理加载xml,名称空间处理,DTD处理

 2:具体操作类:XmlHelper-》实现对xml具体的增删改查操作,并加入强大的功能,处理MDataRow和MDataTable。

 3:DTD解析类:XhtmlUrlResolver-》实现对实体dtd路径的解析

 4:多国语言:MutilLanguage-》实现对xml最基本的文本取值。

 5:SetType、ValueReplace-》枚举与替换常量

 

 五:XmlHelper 重点语法演示

 A:基本语法

复制代码
 1:实例化 XmlHelper helper=new XmlHelper(true); //为ture则表示加载html,默认处理名称空间及解析dtd

 2:加载    bool result=helper.Load(Server.MapPath("demo.html"));

 3:查询    XmlNode node=helper.GetByID("cyq");//从整个文档取只取id='cyq'的节点。

 4:子查询 XmlNode child=Helper.GetByID("cyqchild",node);//从node节点内容中找id='cyqchild'的节点

 --其它Get与GetByXX方法类似。

 5:列表查询 XmlNodeList nodeList=helper.GetList("div","id","cyq",node);//从node节点内容中找div且id='cyq'的所有节点

 --这是最长的重载方法,其它重载方法省略
 
 6:节点赋值 helper.Set(node,SetType.Value,"http://cyq1162.cnblogs.com");//对node的属性value设置值,如果属性不存在则创建。
 
 7:其它方法详见V3.0 API文档
复制代码

 

 B:与CYQ.Data.Table 共舞,创新SetFor与SetForeach语法

 以下示例节选自 重构中的 8国语言版博客

 1:实例化与加载略过-》并改实例名helper为Document

 2:LoadData(MDataRow) 与SetFor语法,如:

复制代码
using (MAction action = new  MAction(TableNames.Users))
{
     
if (action.Fill( 1 ))
     {
        Document.LoadData(action.Data);
        Document.SetFor("labSpaceName");//从action.Data中取SpaceName的值赋给id=labSpaceName的节点的InnerXml属性。
        Document.SetFor(IDKey.labSpaceIntro,SetType.value);//从action.Data中取SpaceIntro的值赋给id=labSpaceIntro的节点的value属性。
     }
}
复制代码

 

  3:LoadData(MDataTable) 与SetForeach语法,如:

  示例1:最原始循环

复制代码
        public   void  FillArticlClass() // 文章分类
        {
            MDataTable table;
            
int  count;
            
using  (MAction action  =   new  MAction(TableNames.Class))
            {
                table 
=  action.Select( 0 0 string .Format( " {0}={1} and {2}=0 " , Class.UserID, DomainID,Class.TypeID),  out  count);
            }
            
if  (count  >   0 )
            {
                Document.LoadData(table);
                Document.SetForeach(IDKey.labArticleClass, 
" <li><a href=\ ""  + UrlPrefix+  " / article / category / { 0 }\ "  >{1}</a> ({2})</li> " , Class.ID, Class.Name, Class.Count);
            }
        }
复制代码

 

 示例2:原始循环+对值格式化处理

复制代码
        public   void  FillNewComment() // 最新评论
        {
            MDataTable table;
            
int  count;
            
using  (MAction action  =   new  MAction(TableNames.Comment))
            {
                table 
=  action.Select( 1 10 string .Format( " {0}=0 and {1}={2} " ,Comment.TypeID,Comment.ContentUserID, DomainID),  out  count);
            }
            
if  (count  >   0 )
            {
                Document.LoadData(table);
                Document.OnForeach 
+=   new  XmlHelper.SetForeachEventHandler(Document_OnForeach);
                Document.SetForeach(IDKey.labNewComment, 
" <li><a href=\ ""  + UrlPrefix +  " / article / detail / { 0 }\ "  >{1}</a></li> " , Comment.ContentID, Comment.Body);
            }
        }

        
string  Document_OnForeach( string  text,  object [] values,  int  row)
        {
// 对评论长度进行截断
             string  key  =  Convert.ToString(values[ 1 ]);
            
if  ( ! string .IsNullOrEmpty(key)  &&  key.Length  >   12 )
            {
                values[
1 =  key.Substring( 0 12 );
            }
            
return  text;
        }
复制代码

 示例3:节点预处理

复制代码
        public   void  FillAllUser() // 填充主页所有用户
        {
            
using  (MAction action  =   new  MAction(TableNames.Users))
            {
                Document.Set(IDKey.labUserName, SetType.A, 
" {0}[{1}] " ,Config.HttpHost + " /{1} " );
                Document.LoadData(action.Select());
                Document.SetForeach(IDKey.labAllUser, SetType.InnerXml, Users.NickName, Users.UserName);
            }
        }
复制代码

 

  示例4:节点预处理+格式化

复制代码
        private   void  FillForeachArticle(MDataTable table) // 填充循环文章列表
        {
            Document.Set(IDKey.labEdit,SetType.Href,UrlPrefix 
+   " /admin/article/edit/{0} " );
            Document.Set(IDKey.labDelete, SetType.Href, UrlPrefix 
+   " /admin/article/del/{0} " );
            Document.Set(IDKey.labTitle, SetType.A, 
" {1} " , UrlPrefix  +   " /article/detail/{0} " );
            Document.Set(IDKey.labCreateTime, 
" {2} " );
            Document.Set(IDKey.labIsPub, 
" {3} " );
            Document.Set(IDKey.labHits, ValueReplace.Source 
+   " ({4}) " );
            Document.Set(IDKey.labCommentCount, ValueReplace.Source 
+   " ({5}) " );

            Document.LoadData(table);
            Document.OnForeach 
+=   new  XmlHelper.SetForeachEventHandler(Document_OnForeach);
            Document.SetForeach(IDKey.labArticleList,SetType.InnerXml,
            Content.ID, Content.Title, Content.CreateTime, Content.IsPub, Content.Hits, Content.CommentCount);

        }

        
string  Document_OnForeach( string  text,  object [] values,  int  row)
        {
            values[
3 =  Convert.ToString(values[ 3 ])  ==   " 1 "   ?   " 已发布 "  :  " 未发布 " ;
            
return  text;
        }
复制代码

 

  六:V3.0 API文档与CYQ.Data.DLL下载

 

复制代码
 本次版本发布包括:

 框架DLL:CYQ.Data.DLL V3.0版本

 API文档:V3.0版本

 具体下载地址:CYQ.Data 轻量数据层之路 bug反馈、优化建议、最新框架下载
复制代码

 

 

  结言:

 谢谢大伙对本框架喜爱,欢迎大伙下载使用。

 

版权声明:本文原创发表于博客园,作者为路过秋天,原文链接:

http://www.cnblogs.com/cyq1162/archive/2010/11/03/1867642.html

相关文章
|
7月前
|
Kubernetes Cloud Native Java
Activiti 简介以及最新activiti依赖 pom.xml文件(使用时注意对应版本号)
Activiti 简介以及最新activiti依赖 pom.xml文件(使用时注意对应版本号)
268 2
|
7月前
|
XML 前端开发 数据格式
请描述如何使用`BeautifulSoup`或其他类似的库来解析 HTML 或 XML 数据。
【2月更文挑战第22天】【2月更文挑战第67篇】请描述如何使用`BeautifulSoup`或其他类似的库来解析 HTML 或 XML 数据。
82 2
|
7月前
|
XML 存储 JSON
Python学习 -- 常用数据交换格式(CSV、XML、JSON)
Python学习 -- 常用数据交换格式(CSV、XML、JSON)
102 0
|
7月前
|
XML Java 数据库连接
手写mybatis xml版本
手写mybatis xml版本
57 0
|
3月前
|
XML 存储 JSON
Twaver-HTML5基础学习(19)数据容器(2)_数据序列化_XML、Json
本文介绍了Twaver HTML5中的数据序列化,包括XML和JSON格式的序列化与反序列化方法。文章通过示例代码展示了如何将DataBox中的数据序列化为XML和JSON字符串,以及如何从这些字符串中反序列化数据,重建DataBox中的对象。此外,还提到了用户自定义属性的序列化注册方法。
51 1
|
4月前
|
XML 数据采集 存储
使用Java和XPath在XML文档中精准定位数据
在数据驱动的时代,从复杂结构中精确提取信息至关重要。XML被广泛用于数据存储与传输,而XPath则能高效地在这些文档中导航和提取数据。本文深入探讨如何使用Java和XPath精准定位XML文档中的数据,并通过小红书的实际案例进行分析。首先介绍了XML及其挑战,接着阐述了XPath的优势。然后,提出从大型XML文档中自动提取特定产品信息的需求,并通过代理IP技术、设置Cookie和User-Agent以及多线程技术来解决实际网络环境下的数据抓取问题。最后,提供了一个Java示例代码,演示如何集成这些技术以高效地从XML源中抓取数据。
182 7
使用Java和XPath在XML文档中精准定位数据
|
3月前
|
XML Java 应用服务中间件
springMVC01,springMVC的执行流程【第一个springMVC例子(XML配置版本):HelloWorld】
通过一个HelloWorld实例,介绍了SpringMVC的基本概念、执行流程,并详细讲解了如何创建和配置第一个SpringMVC项目(基于XML)。
springMVC01,springMVC的执行流程【第一个springMVC例子(XML配置版本):HelloWorld】
|
7月前
|
XML 前端开发 数据格式
BeautifulSoup 是一个 Python 库,用于从 HTML 和 XML 文件中提取数据
【5月更文挑战第10天】BeautifulSoup 是 Python 的一个库,用于解析 HTML 和 XML 文件,即使在格式不规范的情况下也能有效工作。通过创建 BeautifulSoup 对象并使用方法如 find_all 和 get,可以方便地提取和查找文档中的信息。以下是一段示例代码,展示如何安装库、解析 HTML 数据以及打印段落、链接和特定类名的元素。BeautifulSoup 还支持更复杂的查询和文档修改功能。
149 1
|
2月前
|
XML Web App开发 数据格式
HTML 页面显示 XML 数据
10月更文挑战第2天
|
2月前
|
XML JSON 前端开发
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
C#使用HttpClient四种请求数据格式:json、表单数据、文件上传、xml格式
574 0