JavaScript XML操作 封装类


Posted in Javascript onJuly 01, 2009
function XMLObject() 
{ 
this.isIE=true; 
if (window.ActiveXObject){isIE=true;}else{isIE=false;} 
var node_xml; 
var xmlDoc; 
if (isIE){ 
xmlDoc = new ActiveXObject("Msxml2.DOMDocument"); 
} 
else{ 
if (document.implementation && document.implementation.createDocument){ 
xmlDoc = document.implementation.createDocument("","",null); 
} 
} 
xmlDoc.async = false; 
xmlDoc.resolveExternals = false; 
xmlDoc.validateOnParse = false; 
xmlDoc.preserveWhiteSpace = true; 
//从字符串创建XML对象(XML字符串) 
this.LoadXMLForString=function(XMLStr) 
{ 
if(isIE) 
{ 
xmlDoc.loadXML(XMLStr); 
} 
else 
{ 
var oParser = new DOMParser(); 
xmlDoc = oParser.parseFromString(XMLStr,"text/xml"); 
} 
} 
//从外部文件创建XML文件(文件路径) 
this.getXMLForURL=function(url) 
{ 
//xmlDoc.load(url); 
if (isIE){ 
xmlDoc.load(url); 
} 
else 
{ 
xmlDoc = getXML(url).responseXML; 
} 
} 
//获得节点字节点 
this.getXMLArray=function (name) { 
var keys = name.split('.'); 
var node = xmlDoc.documentElement; // 得到根节点 
var rtn = new Array(); 
var n = 0; 
for(var i=0; i<keys.length; i++) { 
var childs = node.childNodes; // 得到子节点 
var key = keys[i]; 
for(var k=0; k<childs.length; k++) { 
var child = childs[k]; 
if(child.nodeName == key) { // 判断子节点是否符合 
if(i == keys.length-1) { 
rtn[n] = child; 
n++; 
} else { 
node = child; 
break; 
} 
} 
} 
} 
node_xml=rtn; 
return rtn; 
} 
//获得节点内容 
this.getNodeValue=function(name) 
{ 
return this.getValue(xmlDoc,name); 
} 
//根据节点获得节点下子节点内容 
this.getValue=function(node, name) 
{ 
var keys = name.split('.'); 
for(var i=0; i<keys.length; i++) 
{ 
var childs = node.childNodes; // 得到子节点 
var key = keys[i]; 
for(var k=0; k<childs.length; k++) 
{ 
var child = childs[k]; 
if(child.nodeName == key) 
{ // 判断子节点是否符合 
if(child.childNodes.length == 1) 
{ 
// 如果没有字节点,返回值 
if(!window.ActiveXObject) 
{ 
return childs[k].textContent; 
} 
else 
{ 
return childs[k].text 
} 
} 
else 
{ 
// 还有子节点,继续分析 
node = child; 
break; 
} 
} 
} 
} 
return ""; 
} 
function GetXMLHTTP() 
{ 
var xmlhttp; 
if (window.ActiveXObject){ 
try{xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");} 
catch (e){xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");} 
}else if (window.XMLHttpRequest) 
{xmlhttp=new XMLHttpRequest();} 
return xmlhttp; 
} 
function getXML(url){ 
var xmlHttp=GetXMLHTTP(); 
if (xmlHttp!=null){ 
xmlHttp.open("GET",url,false); 
xmlHttp.send(null); 
}else{ 
alert("Your browser does not support XMLHTTP.11"); 
return false; 
} 
return xmlHttp; 
} 
}

调用方法DEMO
var strXML="<?xml version='1.0' encoding='utf-8'?><ekuy><user><name><cnname>小猪</cnname></name><age>27</age></user><user><name><cnname>小霞</cnname></name><age>26</age></user><user><name><cnname>小章</cnname></name><age>25</age></user></ekuy>"; var XMLObj=new XMLObject(); 
XMLObj.LoadXMLForString(strXML) 
//XMLObj.getXMLForURL("test.xml"); 
var list = XMLObj.getXMLArray( 'user');//获得节点 
document.write(XMLObj.getNodeValue('ekuy.user.name.cnname'));//直接获得节点内容 
//循环节点获得节点下子节点内容 
for(var i=0; i<list.length; i++) { 
var obj = list[i]; 
document.write(XMLObj.getValue(obj, 'name.cnname')); 
document.write(XMLObj.getValue(obj, 'age')); 
document.write('<br\/>'); 
}

呵呵 写的不怎样 大家见笑 非常简单的功能
Javascript 相关文章推荐
JavaScript中的Location地址对象
Jan 16 Javascript
让AJAX不依赖后端接口实现方案
Dec 03 Javascript
Javascript模块化编程(一)模块的写法最佳实践
Jan 17 Javascript
javascript感应鼠标图片透明度显示的方法
Feb 24 Javascript
动态加载JavaScript文件的两种方法
Apr 22 Javascript
微信小程序 this和that详解及简单实例
Feb 13 Javascript
JS传参及动态修改页面布局
Apr 13 Javascript
vue-router相关基础知识及工作原理
Mar 16 Javascript
详解vue服务端渲染浏览器端缓存(keep-alive)
Oct 12 Javascript
JavaScript函数式编程(Functional Programming)声明式与命令式实例分析
May 21 Javascript
详解webpack打包vue项目之后生成的dist文件该怎么启动运行
Sep 06 Javascript
ES6 async、await的基本使用方法示例
Jun 06 Javascript
js 跨域和ajax 跨域问题小结
Jul 01 #Javascript
javawscript 三级菜单的实现原理
Jul 01 #Javascript
Javascript 函数对象的多重身份
Jun 28 #Javascript
Javascript 阻止javascript事件冒泡,获取控件ID值
Jun 27 #Javascript
event对象的方法 兼容多浏览器
Jun 27 #Javascript
js AspxButton的客户端操作
Jun 26 #Javascript
javascript 变量作用域 代码分析
Jun 26 #Javascript
You might like
Discuz! 5.0.0论坛程序中加入一段js代码,让会员点击下载附件前自动弹出提示窗口
2007/04/18 PHP
处理php自动反斜杠的函数代码
2010/01/05 PHP
ThinkPHP Mobile使用方法简明教程
2014/06/18 PHP
用PHP代码给图片加水印
2015/07/01 PHP
PHP 7.0.2 正式版发布
2016/01/08 PHP
JS类定义原型方法的两种实现的区别评论很多
2007/09/12 Javascript
javascript显示隐藏层比较不错的方法分析
2008/09/30 Javascript
javascript与CSS复习(三)
2010/06/29 Javascript
Jquery事件的连接使用示例
2013/06/18 Javascript
JavaScript字符串对象toUpperCase方法入门实例(用于把字母转换为大写)
2014/10/17 Javascript
jQuery中height()方法用法实例
2014/12/24 Javascript
基于JavaScript实现Json数据根据某个字段进行排序
2015/11/24 Javascript
简单解析JavaScript中的__proto__属性
2016/05/10 Javascript
JavaScript每天必学之数组和对象部分
2016/09/17 Javascript
Vue.js事件处理器与表单控件绑定详解
2017/03/20 Javascript
nodejs中安装ghost出错的原因及解决方法
2017/10/23 NodeJs
服务端预渲染之Nuxt(使用篇)
2019/04/08 Javascript
JS中的算法与数据结构之常见排序(Sort)算法详解
2019/08/16 Javascript
JavaScript setTimeout()基本用法有哪些
2020/11/04 Javascript
windows系统中python使用rar命令压缩多个文件夹示例
2014/05/06 Python
Python greenlet实现原理和使用示例
2014/09/24 Python
Python模拟登录验证码(代码简单)
2016/02/06 Python
深入理解python多进程编程
2016/06/12 Python
python中使用%与.format格式化文本方法解析
2017/12/27 Python
Python 词典(Dict) 加载与保存示例
2019/12/06 Python
pytorch之ImageFolder使用详解
2020/01/06 Python
Python + selenium + crontab实现每日定时自动打卡功能
2020/03/31 Python
Python 给下载文件显示进度条和下载时间的实现
2020/04/02 Python
用HTML5制作数字时钟的教程
2015/05/11 HTML / CSS
澳大利亚领先的时尚内衣零售商:Bras N Things
2020/07/28 全球购物
施惠特软件测试面试题以及笔试题
2015/05/13 面试题
员工安全责任书范本
2014/07/24 职场文书
2014年政协委员工作总结
2014/12/01 职场文书
三峡导游词
2015/01/31 职场文书
什么是创业计划书?什么是商业计划书?这里一一解答
2019/07/12 职场文书
win10忘记pin密码登录不了怎么办?win10忘记pin密码登不进去的解决方法
2022/07/07 数码科技