js实现的xml对象转json功能示例
发布时间 - 2026-01-10 22:04:43 点击率:次本文实例讲述了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
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel如何为API生成Swagger或OpenAPI文档
javascript中的数组方法有哪些_如何利用数组方法简化数据处理
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
Laravel N+1查询问题如何解决_Eloquent预加载(Eager Loading)优化数据库查询
如何快速生成高效建站系统源代码?
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】
重庆市网站制作公司,重庆招聘网站哪个好?
网站图片在线制作软件,怎么在图片上做链接?
Angular 表单中正确绑定输入值以确保提交与验证正常工作
敲碗10年!Mac系列传将迎来「触控与联网」双革新
PythonWeb开发入门教程_Flask快速构建Web应用
Java解压缩zip - 解压缩多个文件或文件夹实例
C++时间戳转换成日期时间的步骤和示例代码
Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用
利用vue写todolist单页应用
iOS验证手机号的正则表达式
长沙企业网站制作哪家好,长沙水业集团官方网站?
Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践
php打包exe后无法访问网络共享_共享权限设置方法【教程】
Laravel中间件如何使用_Laravel自定义中间件实现权限控制
SQL查询语句优化的实用方法总结
Laravel Octane如何提升性能_使用Laravel Octane加速你的应用
如何在阿里云域名上完成建站全流程?
nodejs redis 发布订阅机制封装实现方法及实例代码
Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】
Laravel如何与Inertia.js和Vue/React构建现代单页应用
微信推文制作网站有哪些,怎么做微信推文,急?
logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?
如何做网站制作流程,*游戏网站怎么搭建?
Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南
如何快速搭建二级域名独立网站?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】
实例解析Array和String方法
如何用狗爹虚拟主机快速搭建网站?
如何确认建站备案号应放置的具体位置?
Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解
Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件
通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】
Laravel路由怎么定义_Laravel核心路由系统完全入门指南
西安专业网站制作公司有哪些,陕西省建行官方网站?
Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】
Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
Win11怎么关闭资讯和兴趣_Windows11任务栏设置隐藏小组件
Laravel辅助函数有哪些_Laravel Helpers常用助手函数大全
头像制作网站在线观看,除了站酷,还有哪些比较好的设计网站?
ChatGPT 4.0官网入口地址 ChatGPT在线体验官网

