js实现的xml对象转json功能示例
作者:碉堡猫 时间:2024-04-19 10:41:59
本文实例讲述了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"
}
]
希望本文所述对大家JavaScript程序设计有所帮助。
标签:js,xml,json
0
投稿
猜你喜欢
使用python绘制温度变化雷达图
2021-06-23 05:44:02
Python调用VBA实现保留原始样式的表格合并方法
2022-10-18 02:40:45
详解Python+Pyecharts实现漏斗图的绘制
2022-07-07 10:22:42
Python制作动态字符图的实例
2023-11-02 07:17:18
Python标准库calendar的使用方法
2023-09-01 01:28:07
pytorch 如何使用float64训练
2023-08-12 00:19:45
在Python中使用异步Socket编程性能测试
2023-04-20 23:19:56
numpy数组之存取文件的实现示例
2021-02-20 11:32:57
mysql unix准换时间格式查找指定日期数据代码
2024-01-16 00:35:24
Python+OpenCV+图片旋转并用原底色填充新四角的例子
2022-09-07 14:11:23
Django--权限Permissions的例子
2021-02-16 01:44:51
MySQL数据表添加字段的三种方式
2024-01-13 10:49:30
Python3实现自定义比较排序/运算符
2023-04-15 23:32:25
语义化的HTML结构到底有何好处?
2009-07-13 12:38:00
Python常用内置函数的使用教程详解
2021-11-11 21:23:50
mysqlreport显示Com_中change_db占用比例高的问题的解决方法
2024-01-26 03:17:38
mysql千万级数据大表该如何优化?
2024-01-20 22:08:05
使用Python获取CPU、内存和硬盘等windowns系统信息的2个例子
2023-08-26 23:12:32
Python ORM框架SQLAlchemy学习笔记之数据添加和事务回滚介绍
2023-06-15 22:47:05
oracle数据库中如何处理clob字段方法介绍
2024-01-17 05:55:41