本文实例讲述了js实现的xml对象转json功能。分享给大家供大家参考,具体如下:

支持无限级别xml结构对象转json,并且支持任意标签属性转json(兼容ie8等浏览器)
xml字符串转xml对象:
function loadXml(str) {
if (str == null) {
return null;
}
var doc = str;
try{
doc = createXMLDOM();
doc.async = false;
doc.loadXML(str);
}catch(e){
doc = $.parseXML(str);
}
return doc;
}
/**
*xml对象转json对象
*xmlObj:xml对象
*nodename:节点路径('ROOT/ITEM')
*isarray:true,强制返回数组对象
**/
function xmltojson(xmlObj,nodename,isarray){
var obj=$(xmlObj);
var itemobj={};
var nodenames="";
var getAllAttrs=function(node){//递归解析xml 转换成json对象
var _itemobj={};
var notNull=false;
var nodechilds=node.childNodes;
var childlenght=nodechilds.length;
var _attrs=node.attributes;
var firstnodeName="#text";
try{
firstnodeName=nodechilds[0].nodeName;
}catch(e){}
if((childlenght>0&&firstnodeName!="#text")||_attrs.length>0){
var _childs=nodechilds;
var _childslength=nodechilds.length;
var _fileName_="";
if(undefined!=_attrs){
var _attrslength=_attrs.length;
for(var i=0; i<_attrslength; i++){//解析xml节点属性
var attrname=_attrs[i].nodeName;
var attrvalue=_attrs[i].nodeValue;
_itemobj[attrname]=attrvalue;
}
}
for (var j = 0; j < _childslength; j++) {//解析xml子节点
var _node = _childs[j];
var _fildName = _node.nodeName;
if("#text"==_fildName){break;};
if(_itemobj[_fildName]!=undefined){//如果有重复的节点需要转为数组格式
if(!(_itemobj[_fildName] instanceof Array)){
var a=_itemobj[_fildName];
_itemobj[_fildName]=[a];//如果该节点出现大于一个的情况 把第一个的值存放到数组中
}
}
var _fildValue=getAllAttrs(_node);
try{
_itemobj[_fildName].push(_fildValue);
}catch(e){
_itemobj[_fildName]=_fildValue;
_itemobj["length"]=1;
}
}
}else{
_itemobj=(node.textContent==undefined)?node.text:node.textContent;
}
return _itemobj;
};
if(nodename){
nodenames=nodename.split("/")
}
for(var i=0;i<nodenames.length;i++){
obj=obj.find(nodenames[i]);
}
$(obj).each(function(key,item){
if(itemobj[item.nodeName]!=undefined){
if(!(itemobj[item.nodeName] instanceof Array)){
var a=itemobj[item.nodeName];
itemobj[item.nodeName]=[a];
}
itemobj[item.nodeName].push(getAllAttrs(item));
}else{
if(nodenames.length>0){
itemobj[item.nodeName]=getAllAttrs(item);
}else{
itemobj[item.firstChild.nodeName]=getAllAttrs(item.firstChild);
}
}
});
if(nodenames.length>1){
itemobj=itemobj[nodenames[nodenames.length-1]];
}
if(isarray&&!(itemobj instanceof Array)&&itemobj!=undefined){
itemobj=[itemobj];
}
return itemobj;
};
使用方法:
var xmlstr="<USERS>" +
"<USER state='0'>" +
"<USERNAME type='String'>张三</USERNAME>" +
"<USERID type='String'>00001</USERID>" +
"</USER>" +
"<USER state='1'>" +
"<USERNAME type='String' size='100'>李四</USERNAME>" +
"<USERID>00002</USERID>" +
"</USER>" +
"<USER>" +
"<USERNAME>李四</USERNAME>" +
"<USERID>00002</USERID>" +
"</USER>" +
"</USERS>";
var xmlobj=loadXml(xmlstr);
参数设置:
(1) xmltojson(xmlobj);//返回结果如下
{
"USERS": {
"USER": [
{
"state": "0",
"USERNAME": {
"type": "String"
},
"length": 1,
"USERID": {
"type": "String"
}
},
{
"state": "1",
"USERNAME": {
"type": "String",
"size": "100"
},
"length": 1,
"USERID": "00002"
},
{
"USERNAME": "李四",
"length": 1,
"USERID": "00002"
}
],
"length": 1
}
}
(2)xmltojson(xmlobj,'USERS/USER',true);返回结果如下:
[
{
"state": "0",
"USERNAME": {
"type": "String"
},
"length": 1,
"USERID": {
"type": "String"
}
},
{
"state": "1",
"USERNAME": {
"type": "String",
"size": "100"
},
"length": 1,
"USERID": "00002"
},
{
"USERNAME": "李四",
"length": 1,
"USERID": "00002"
}
]
PS:这里再为大家提供几款关于xml操作的在线工具供大家参考使用:
在线XML/JSON互相转换工具:
http://tools./code/xmljson
在线格式化XML/在线压缩XML:
http://tools./code/xmlformat
XML在线压缩/格式化工具:
http://tools./code/xml_format_compress
XML代码在线格式化美化工具:
http://tools./code/xmlcodeformat
更多关于JavaScript相关内容可查看本站专题:《JavaScript操作XML文件技巧总结》、《JavaScript中json操作技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。
# js
# xml
# json
# Java解析xml文件和json转换的方法(DOM4j解析)
# JS XMLHttpRequest原理与使用方法深入详解
# JS操作XML中DTD介绍及使用方法分析
# js使用xml数据载体实现城市省份二级联动效果
# 使用JS读取XML文件的方法
# js制作xml在线编辑器实例
# 李四
# 递归
# 相关内容
# 第一个
# 遍历
# 数据结构
# 给大家
# 转换成
# 更多关于
# 所述
# 几款
# 程序设计
# 转换工具
# 再为
# 参数设置
# 组中
# 操作技巧
# 讲述了
# node
# getAllAttrs
相关文章:
如何通过可视化优化提升建站效果?
c# 在高并发场景下,委托和接口调用的性能对比
昆明网站制作哪家好,昆明公租房申请网上登录入口?
制作国外网站的软件,国外有哪些比较优质的网站推荐?
如何通过NAT技术实现内网高效建站?
如何快速搭建高效服务器建站系统?
网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?
免费公司网站制作软件,如何申请免费主页空间做自己的网站?
如何选择PHP开源工具快速搭建网站?
建站之家VIP精选网站模板与SEO优化教程整合指南
建站之星安装步骤有哪些常见问题?
制作旅游网站html,怎样注册旅游网站?
个人摄影网站制作流程,摄影爱好者都去什么网站?
寿县云建站:智能SEO优化与多行业模板快速上线指南
建站之星后台搭建步骤解析:模板选择与产品管理实操指南
实现虚拟支付需哪些建站技术支撑?
免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
如何在万网开始建站?分步指南解析
制作充值网站的软件,做人力招聘为什么要自己交端口钱?
C++如何将C风格字符串(char*)转换为std::string?(代码示例)
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
如何使用Golang安装API文档生成工具_快速生成接口文档
建站之星导航如何优化提升用户体验?
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
番禺网站制作公司哪家值得合作,番禺图书馆新馆开放了吗?
弹幕视频网站制作教程下载,弹幕视频网站是什么意思?
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
如何快速搭建安全的FTP站点?
招贴海报怎么做,什么是海报招贴?
外贸公司网站制作,外贸网站建设一般有哪些步骤?
南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?
盐城做公司网站,江苏电子版退休证办理流程?
交易网站制作流程,我想开通一个网站,注册一个交易网址,需要那些手续?
如何选择服务器才能高效搭建专属网站?
盘锦网站制作公司,盘锦大洼有多少5G网站?
大连 网站制作,大连天途有线官网?
教学论文网站制作软件有哪些,写论文用什么软件
?
制作表格网站有哪些,线上表格怎么弄?
制作门户网站的参考文献在哪,小说网站怎么建立?
网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?
岳西云建站教程与模板下载_一站式快速建站系统操作指南
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
建站之星代理如何获取技术支持?
已有域名和空间如何搭建网站?
如何在IIS管理器中快速创建并配置网站?
php json中文编码为null的解决办法
头像制作网站在线制作软件,dw网页背景图像怎么设置?
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
,柠檬视频怎样兑换vip?
*请认真填写需求信息,我们会在24小时内与您取得联系。