一个快捷操作XML数据库的Javascript接口对象,包含select、count、tables、fields等方法,能够像操作mysql等其它数据库一样操作XML数据库。

 if(document.implementation.hasFeature("XPath","3.0")){ //浏览器bug修复
XMLDocument.prototype.selectNodes=function(cXPathString,xNode){
if(!xNode){xNode=this;}
var oNSResolver=this.createNSResolver(this.documentElement);
var aItems=this.evaluate(cXPathString, xNode, oNSResolver,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
var aResult=[];
for(var i=0;i< aItems.snapshotLength;i++){
aResult[i]=aItems.snapshotItem(i);
}
return aResult;
}
Element.prototype.selectNodes=function(cXPathString){
if(this.ownerDocument.selectNodes){
return this.ownerDocument.selectNodes(cXPathString,this);
}else{throw "For XML Elements Only";}
}
}
/*
jQuery版本要求:1.7.2
XML数据库查询类,实现的方法
load(pt,async):
loadFromText(xStr):
select(tb,data,where,order,limit,group);
count(tb,where);
tables();
fields(tb);
*/
function xml_db(pt,async){
var _root=this,async=typeof(async)!="undefined"?async:true;
_root.dbObj=null;/*数据库对象数组*/
_root.status=false;/*数据库对象数组*/
_root.dbpath=typeof(pt)!="undefined"?pt:false;/*数据库路径*/
_root.ifAutoPara=true; var autoPara=function(para,oriParas){/*自动附加参数*/
if(para.length >2){
for(var i=2;i< para.length;i++){
if(para[i].match(/^\s*where/i)){oriParas['where']=para[i];}
if(para[i].match(/^\s*order/i)){oriParas['order']=para[i];}
if(para[i].match(/^\s*limit/i)){oriParas['limit']=para[i];}
if(para[i].match(/^\s*group/i)){oriParas['group']=para[i];}
}
}
},
WOLG=function(str,kw,oriParas){/*附加参数*/
if(typeof(str)!="undefined"){
var reg=new RegExp("^"+kw+"\\s*","ig"),ky=kw.replace(/\s+\w+/gi,"");
str=str.replace(reg,"");
oriParas[ky]=kw+" "+str;
}
},
decode=function(string,quote_style){/*解码*/
var optTemp=0,i=0,noquotes=false;
if(typeof quote_style === 'undefined'){quote_style=2;}
string=string.toString().replace(/</g, '<').replace(/>/g, '>');
var OPTS={'ENT_NOQUOTES': 0,'ENT_HTML_QUOTE_SINGLE': 1,'ENT_HTML_QUOTE_DOUBLE':2,'ENT_COMPAT':2,'ENT_QUOTES':3,'ENT_IGNORE':4};
if(quote_style===0){noquotes=true;}
if(typeof quote_style !== 'number'){
quote_style=[].concat(quote_style);
for(i=0; i < quote_style.length; i++){
if(OPTS[quote_style[i]] === 0){
noquotes=true;
}else if(OPTS[quote_style[i]]){
optTemp=optTemp | OPTS[quote_style[i]];
}
}
quote_style=optTemp;
}
if(quote_style & OPTS.ENT_HTML_QUOTE_SINGLE){
string=string.replace(/�*39;/g, "'");
string=string.replace(/'|�*27;/g, "'");
}
if(!noquotes){string=string.replace(/"/g, '"');}
string=string.replace(/&/g, '&');
return string;
},
xQuery=function(str,node){
return typeof(node)!="undefined"? node.selectNodes(str):_root.dbObj.selectNodes(str);
}; _root.load=function(pt,async){
var pt=typeof(pt)!="undefined"?pt:_root.dbpath,
async=typeof(async)!="undefined"?async:true;
jQuery.ajax({
'type': "GET",
'url':pt,
'dataType':'text',
'cache': false,
'async': async,
'success': function(dt){
var root=_root.loadFromText(dt.replace(/[\r\n]+/gmi,"").replace(/<!--.*?-->/gi,"").replace(/>\s+/gi,">"));
if(root){
_root.dbObj=root.documentElement;
}
}
});
}; _root.loadFromText=function (xStr){
try{
if(window.DOMParser){
parser=new DOMParser();
txmlDoc=parser.parseFromString(xStr,"text/xml");
}else{
txmlDoc=new ActiveXObject("Microsoft.XMLDOM");
txmlDoc.async="false";
txmlDoc.loadXML(xStr);
}
_root.status=txmlDoc.documentElement?true:false;
return _root.status?txmlDoc:false;
}catch(e){
_root.status=false;
return false;
}
}; _root.query=function(){ }; _root.select=function(tb,data,where,order,limit,group){
if(!_root.status){return false;}
var addtion={},data=typeof(data)=="undefined"?"*":data;
if(!_root.ifAutoPara){ /*自动附加参数*/
autoPara(arguments,addtion);
}else{
WOLG(where,"where",addtion);
WOLG(order,"order by",addtion);
WOLG(limit,"limit",addtion);
WOLG(group,"group by",addtion);
} if(typeof(addtion['where'])=="undefined"){
addtion['where']="where `id`>=0";
}
addtion['where']=addtion['where'].replace(/&&/gi," and ").replace(/\|\|/gi," or ");
addtion['where']=addtion['where'].replace(/^\s*where\s*/gi,""); var fdArr=_root.fields(tb),sFdArr,reg=new RegExp(),oArr,rArr=[];/*相关变量定义*/ if(data!="*"){
sFdArr=jQuery.grep(
jQuery.type(data)=="array"?data:data.split(/\s*,\s*/gi),function(n,i){
return jQuery.inArray(n,fdArr)!=-1;
});
if(!sFdArr.length){return false;}
if(jQuery.inArray("id",sFdArr)==-1){sFdArr.push("id");}
}
jQuery.each(fdArr,function(i,n){
reg.compile('`'+n+'`',"gi");
addtion['where']=addtion['where'].replace(reg,"v"+i);
});
oArr=xQuery("//root/"+tb+"/it["+addtion['where']+"]");
jQuery.each(oArr,function(i,n){
var orArr={};
jQuery.each(n.childNodes,function(dx,cNode){
var curVL=jQuery(cNode).text();
curVL=curVL.match(/^\d+$/,"gi")?parseInt(curVL):(curVL.match(/^\d+\.\d+$/,"gi")?parseFloat(curVL):decode(curVL));
if(data=="*"){
orArr[fdArr[dx]]=curVL;
}else if(jQuery.inArray(fdArr[dx],sFdArr)!=-1){
orArr[fdArr[dx]]=curVL;
}
});
rArr.push(orArr);
}); if(typeof(addtion['order'])!="undefined"){
if(addtion['order'].match(/^\s*order\s+by\s+`?(\w+)`?\s+(asc|desc)\s*$/gi)){
var orders=[];
orders[0]=(jQuery.inArray(RegExp.$1.toString(),fdArr)!=-1)?RegExp.$1.toString():"id";
orders[1]=(jQuery.inArray(RegExp.$2.toString(),["desc","asc"])!=-1)?RegExp.$2.toString():"desc";
rArr.sort(function(a,b){
var ca=0,cb=0;
if(a[orders[0]].toString().match(/^\d+$/gi)&&b[orders[0]].toString().match(/^\d+$/gi)){
ca=parseInt(a[orders[0]]);cb=parseInt(b[orders[0]]);
}else if(a[orders[0]].toString().match(/^\d+\.\d+$/gi)&&b[orders[0]].toString().match(/^\d+\.\d+$/gi)){
ca=parseFloat(a[orders[0]]);cb=parseFloat(b[orders[0]]);
}else{
ca=a[orders[0]];cb=b[orders[0]];
}
if(ca==cb)return 0;
if(orders[1].toLowerCase()=='asc'){
return (ca > cb)? 1 : -1;
}else{
return (ca < cb)? 1 : -1;
}
});
}
};
if(typeof(addtion['limit'])!="undefined"){
if(addtion['limit'].match(/^\s*limit\s+(\d+)\s*,\s*(\d+)\s*$/gi)){
var itemsnum=rArr.length,snum=parseInt(RegExp.$1),lenum=parseInt(RegExp.$2);
snum=(snum < 0) ? 0:(snum < itemsnum ? snum : (itemsnum-1));
rArr2=[];
for(var i=0;i< itemsnum;i++){
if(i >= snum && i <= (snum+lenum-1)){
rArr2.push(rArr[i]);
}
}
return rArr2;
}
}
return rArr;
}; _root.count=function(tb,where){
if(!_root.status){return false;}
var fdArr=_root.fields(tb),reg=new RegExp(),addtion={};
WOLG(where,"where",addtion);
if(typeof(addtion['where'])=="undefined"){
addtion['where']="where `id`>=0";
}
addtion['where']=addtion['where'].replace(/&&/gi," and ").replace(/\|\|/gi," or ");
addtion['where']=addtion['where'].replace(/^\s*where\s*/gi,"");
jQuery.each(fdArr,function(i,n){
reg.compile('`'+n+'`',"gi");
addtion['where']=addtion['where'].replace(reg,"v"+i);
});
return xQuery("//root/"+tb+"/it["+addtion['where']+"]").length;
}; _root.fields=function(tb){
if(!_root.status){return false;}
var tbInfo=xQuery('//root/'+tb);
return tbInfo.length >0 ? tbInfo[0].getAttribute("fd").split("|"):[];
}; _root.tables=function(){
if(!_root.status){return false;}
var tbArr=[];
jQuery.each(xQuery('//root')[0].childNodes,function(dx,n){
tbArr.push(n.tagName);
});
return tbArr;
} if(_root.dbpath!==false){
_root.load(_root.dbpath,async);
} }

XML数据库文件格式(文件名为:db.xml):

<?xml version="1.0" encoding="UTF-8"?>
<root>
<menu fd="id|name|mtype|level|year|major">
<it>
<v0>1</v0>
<v1>云南财经大学</v1>
<v2></v2>
<v3>专升本</v3>
<v4>3年</v4>
<v5>工商管理</v5>
</it>
<it>
<v0>2</v0>
<v1>云南财经大学</v1>
<v2></v2>
<v3>专升本</v3>
<v4>3年</v4>
<v5>会计学</v5>
</it>
<it>
<v0>3</v0>
<v1>云南财经大学</v1>
<v2></v2>
<v3>专升本</v3>
<v4>3年</v4>
<v5>金融学</v5>
</it>
<it>
<v0>4</v0>
<v1>云南财经大学</v1>
<v2></v2>
<v3>高升专</v3>
<v4>3年</v4>
<v5>法律事务</v5>
</it>
</menu>
</root>

  

使用方法介绍:

var dbObj=new xml_db("db.xml",false);
var data=dbObj.select("menu","id,name,major","where `major`!='金融学'","limit 0,2","order by `id` desc");
for(var i=0;i< data.length;i++){
document.write(i+"->id:"+data[i]['id']+" name:"+data[i]['name']+" major:"+data[i]['major']+"<br/>");
}

输出:
0->id:1 name:云南财经大学 major:工商管理
1->id:2 name:云南财经大学 major:会计学 
其它方法说明:
tables():返回所有表的数组;
fields(tb):返回表名为tb的所有字段名;
count(tb,where):返回表tb中符合where条件的记录数量

类似查询mysql数据库的查询XML的JS类的更多相关文章

  1. Mysql数据库使用量查询及授权

    Mysql数据库使用量查询及授权 使用量查询 查看实例下每个库的大小 select TABLE_SCHEMA, concat(truncate(sum(data_length)/1024/1024,2 ...

  2. MySQL中 如何查询表名中包含某字段的表 ,查询MySql数据库架构信息:数据库,表,表字段

    --查询tablename 数据库中 以"_copy" 结尾的表 select table_name from information_schema.tables where ta ...

  3. MySQL数据库的查询缓冲机制

    MySQL数据库的查询缓冲机制 2011-08-10 11:07 佚名 火魔网 字号:T | T 使用查询缓冲机制,可以极大地提高MySQL数据库查询的效率,节省查询所用的时间.那么查询缓冲机制是怎样 ...

  4. 查询Mysql数据库所有数据库所占磁盘空间大小

    查询Mysql数据库所有数据库所占磁盘空间大小: /,),' MB') as data_size, concat(truncate(sum(index_length)//,),'MB') as ind ...

  5. mybatis查询mysql数据库tinyint(1)变为boolean类型

    mybatis查询mysql数据库对象转化为Map,tinyint(1)被转化为boolean类型,可以t通过避免使用tinyint(1)来解决.

  6. MySql数据库慢查询

    一.什么是数据库慢查询? 数据库慢查询,就是查询时间超过了我们设定的时间的语句. 可以查看设定的时间: 默认的设定时间是10秒.也可以自己根据实际项目设定. set long_query_time=0 ...

  7. MYSQL数据库学习----查询

    查询语句是MYSQL数据库中用到的最多的语句. 查询语句分为几种 单表查询 集合函数查询 连接查询 子查询 合并查询 正则表达式查询 一:单表查询 SELECT 属性 FROM 表名 [WHERE 查 ...

  8. linux 下C++查询mysql数据库

    上一节我们看了怎么使用mysql提供的API来连接mysql数据库,现在来看看怎么执行一条简单的查询语句,并且把查询的结果显示出来. 准备工作:首先新建了一个数据库inote,在这个数据库下面新建了一 ...

  9. php中mysql数据库异步查询实现

    问题 通常一个web应用的性能瓶颈在数据库.因为,通常情况下php中mysql查询是串行的.也就是说,如果指定两条sql语句时,第二条sql语句会等到第一条sql语句执行完毕再去执行.这个时候,如果执 ...

随机推荐

  1. Memcached 管理与监控工具 MemAdmin

    MemAdmin是一款可视化的Memcached管理与监控工具,基于 PHP5 & JQuery 开发,体积小,操作简单. 主要功能: 服务器参数监控:STATS.SETTINGS.ITEMS ...

  2. Permutation Sequence(超时,排列问题)

    The set [1,2,3,…,n] contains a total of n! unique permutations. By listing and labeling all of the p ...

  3. [Noip复习知识点][个人向]Zackzh

    只是列列一些要复习的,努力复习吧,有种noip退役的赶脚. 一.模拟 (这你也不会?退役吧) 二.DP 1.基础dp 2.区间dp 3.状压dp 4.树形dp 6.概率(期望)dp 7.环形dp 8. ...

  4. [Bzoj1069][Scoi2007]最大土地面积(凸包)(旋转卡壳)

    1069: [SCOI2007]最大土地面积 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 3629  Solved: 1432[Submit][Sta ...

  5. Mybatis各种模糊查询(转)

    模糊查询: 工作中用到,写三种用法吧,第四种为大小写匹配查询 1. sql中字符串拼接 SELECT * FROM tableName WHERE name LIKE CONCAT(CONCAT('% ...

  6. 项目中遇到的HQL查询问题

    问题描写叙述: 目的:想要查询出全部最新版本号的组件 说明:组件:版本号 =1:n关系 ,假设这个组件仅仅有一个版本号也要可以查出来. 项目中使用的是内存数据库,无法看到表结构,这里的样例仅仅用于模拟 ...

  7. hdu 4950 Monster(数学题,多校8)

    题目链接:pid=4950http://acm.hdu.edu.cn/showproblem.php?pid=4950">http://acm.hdu.edu.cn/showprobl ...

  8. PHPCMS中GET标签概述、 get 标签语法、get 标签创建工具、get 调用本系统演示样例、get 调用其它系统演示样例

    一.get 标签概述 通俗来讲,get 标签是Phpcms定义的能直接调用数据库里面内容的简单化.友好化代码,她可调用本系统和外部数据,仅仅有你对SQL有一定的了解,她就是你的绝世好剑!也就是适合熟悉 ...

  9. SQL yog过期后教你怎么让他不过期

    打开注册表  安装sqlyog后,进入注册表编辑器,进入\HEYK_CURRENT_USER\Software\,找到以{}括起来的那项直接干掉! 1, regedit 2,修改 3,

  10. NSUserDefaults 保存自己定义对象

    项目里json返回的一个model须要保存下来,这个model是固定的没必须去创建表,想到了NSUserDefaults来存储,暂不考虑安全问题. NSUserDefaults没法直接存储一个对象.在 ...