js转换对象为xml


Posted in Javascript onFebruary 17, 2017

本代码解决这两个问题:

1.已知js对象没有类名概念,所以转换时要手动指定顶级节点名称

2.还有数组内的元素如果是对象类型,需要配置此数组元素的节点名称

var XmlHelper=function(){
 var _arrayTypes={}
 var _self=this;
 /*
 *转换对象为xml
 *@obj 目标对象
 *@rootname 节点名称
 *@arraytypes 配置数组字段子元素的节点名称
 */
 this.parseToXML=function(obj,rootname,arraytypes){
 if(arraytypes){
  _arrayTypes=arraytypes;
 }
 var xml="";
 if(typeof obj!=="undefined"){
  if(Array.isArray(obj)){
  xml+=parseArrayToXML(obj,rootname);
  }else if(typeof obj==="object"){
  xml+=parseObjectToXML(obj,rootname);
  }else{
  xml+=parseGeneralTypeToXML(obj,rootname);
  }
 }
 return xml;
 }
 var parseObjectToXML=function(obj,rootname){
 if(typeof rootname==="undefined"||!isNaN(Number(rootname))){
  rootname="Object";
 }
 var xml="<"+rootname+">";
 if(obj){
  for(var field in obj){
  var value=obj[field];
  if(typeof value!=="undefined"){
   if(Array.isArray(value)){
   xml+=parseArrayToXML(value,field);
   }else if(typeof value==="object"){
   xml+=_self.parseToXML(value,field);
   }else{
   xml+=parseGeneralTypeToXML(value,field);
   }
  }
  }
 }
 xml+="</"+rootname+">";
 return xml;
 }
 var parseArrayToXML=function(array,rootname){
 if(typeof rootname==="undefined"||!isNaN(Number(rootname))){
  rootname="Array";
 }
 var xml="<"+rootname+">";
 if(array){
  var itemrootname=_arrayTypes[rootname];
  array.forEach(function(item){
  xml+=_self.parseToXML(item,itemrootname);
  });
 }
 xml+="</"+rootname+">";
 return xml;
 }
 var parseGeneralTypeToXML=function(value,rootname){
 if(typeof rootname==="undefined"||!isNaN(Number(rootname))){
  rootname=typeof value;
 }
 var xml="<"+rootname+">"+value+"</"+rootname+">";
 return xml;
 }
}
//===========测试==========
var xmlhelper=new XmlHelper();
//示例1
var testobj={
 field1:"1",
 field2:true,
 field3:[{a:1},{a:2}]
 }
console.log(xmlhelper.parseToXML(testobj,"testobj",{field3:"ArrayItem"}));
//输出:<testobj><field1>1</field1><field2>true</field2><field3><ArrayItem><a>1</a></ArrayItem><ArrayItem><a>2</a></ArrayItem></field3></testobj>
console.log("================================================");
//示例2
var testobj2=[1,2,3];
console.log(xmlhelper.parseToXML(testobj2,"testobj2"));
//输出:<testobj2><number>1</number><number>2</number><number>3</number></testobj2>

此转换代码有使用限制

对象中值为数组的字段名最好不要一样

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
jQuery autocomplete插件修改
Apr 17 Javascript
jQuery 自定义函数写法分享
Mar 30 Javascript
MyEclipse取消验证Js的两种方法
Nov 14 Javascript
每天一篇javascript学习小结(Array数组)
Nov 11 Javascript
快速解决vue-cli不能初始化webpack模板的问题
Mar 20 Javascript
JS内部事件机制之单线程原理
Jul 02 Javascript
layui从数据库中获取复选框的值并默认选中方法
Aug 15 Javascript
关于Vue Router中路由守卫的应用及在全局导航守卫中检查元字段的方法
Dec 09 Javascript
node.js连接mysql与基本用法示例
Jan 05 Javascript
vue项目中使用vue-i18n报错的解决方法
Jan 13 Javascript
Node.js 多线程完全指南总结
Mar 27 Javascript
JS性能优化实现方法及优点进行
Aug 30 Javascript
EsLint入门学习教程
Feb 17 #Javascript
使用bat打开多个cmd窗口执行gulp、node
Feb 17 #Javascript
AngularJS执行流程详解
Feb 17 #Javascript
详解Angularjs在控制器(controller.js)中使用过滤器($filter)格式化日期/时间实例
Feb 17 #Javascript
bootstrap Validator 模态框、jsp、表单验证 Ajax提交功能
Feb 17 #Javascript
走进AngularJs之过滤器(filter)详解
Feb 17 #Javascript
jQuery实现弹幕效果
Feb 17 #Javascript
You might like
当海贼王变成JOJO风
2020/03/02 日漫
Re:从零开始的异世界生活 第2季 开播啦
2020/07/24 日漫
PHP Socket 编程
2010/04/09 PHP
PHP面向对象程序设计之类常量用法实例
2014/08/20 PHP
php+mysql+jquery实现简易的检索自动补全提示功能
2017/04/15 PHP
jquery中实现简单的tabs插件功能的代码
2011/03/02 Javascript
关于js中for in的缺陷浅析
2013/12/02 Javascript
Bootstrap每天必学之导航组件
2016/04/25 Javascript
JavaScript每天必学之事件
2016/09/18 Javascript
详谈jQuery unbind 删除绑定事件 / 移除标签方法
2017/03/02 Javascript
JS简单实现获取元素的封装操作示例
2017/04/07 Javascript
详解Node使用Puppeteer完成一次复杂的爬虫
2018/04/18 Javascript
浅谈Webpack下多环境配置的思路
2018/06/27 Javascript
vuejs前后端数据交互之从后端请求数据的实例
2018/08/11 Javascript
Vue条件循环判断+计算属性+绑定样式v-bind的实例
2018/09/18 Javascript
vue-resource post数据时碰到Django csrf问题的解决
2020/03/13 Javascript
Vue前端判断数据对象是否为空的实例
2020/09/02 Javascript
[49:27]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第一场
2018/04/05 DOTA
Python实现购物车程序
2018/04/16 Python
使用python itchat包爬取微信好友头像形成矩形头像集的方法
2019/02/21 Python
Python 限制线程的最大数量的方法(Semaphore)
2019/02/22 Python
Python-copy()与deepcopy()区别详解
2019/07/12 Python
Python如何安装第三方模块
2020/05/28 Python
css3实现动画的三种方式
2020/08/24 HTML / CSS
美国名牌太阳镜折扣网站:Eyedictive
2017/05/15 全球购物
药剂专业学生求职信范文
2013/12/28 职场文书
一年级语文教学反思
2014/02/13 职场文书
中考标语大全
2014/06/05 职场文书
化学专业毕业生求职信
2014/07/28 职场文书
旷课检讨书500字
2014/10/14 职场文书
湖南省召开党的群众路线教育实践活动总结大会报告
2014/10/21 职场文书
2014学习十八届四中全会精神思想汇报范文
2014/10/23 职场文书
公安个人四风问题对照检查及整改措施
2014/10/28 职场文书
打架检讨书
2015/01/27 职场文书
Python 数据可视化之Seaborn详解
2021/11/02 Python
vue项目配置sass及引入外部scss文件
2022/04/14 Vue.js