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编辑器KindEditor4.1.4代码高亮显示设置教程
Mar 01 Javascript
Javascript中 关于prototype属性实现继承的原理图
Apr 16 Javascript
JS cookie中文乱码解决方法
Jan 28 Javascript
简单方法判断JavaScript对象为null或者属性为空
Sep 26 Javascript
JQuery实现动态适时改变字体颜色的方法
Mar 10 Javascript
jquery通过closest选择器修改上级元素的方法
Mar 17 Javascript
vue-router路由参数刷新消失的问题解决方法
Jun 17 Javascript
JS实现非首屏图片延迟加载的示例
Jan 06 Javascript
详解promise.then,process.nextTick, setTimeout 以及 setImmediate的执行顺序
Nov 21 Javascript
JS使用栈判断给定字符串是否是回文算法示例
Mar 04 Javascript
node微信开发之获取access_token+自定义菜单
Mar 17 Javascript
浅探express路由和中间件的实现
Sep 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
把77A收信机改造成收音机
2021/03/02 无线电
用文本文件制作留言板提示(下)
2006/10/09 PHP
PHP循环语句笔记(foreach,list)
2011/11/29 PHP
PHP编程之设置apache虚拟目录
2016/07/08 PHP
PHP Mysqli 常用代码集合
2016/11/12 PHP
JSDoc 介绍使用规范JsDoc的使用介绍
2011/02/12 Javascript
jQuery的显示和隐藏方法与css隐藏的样式对比
2013/10/18 Javascript
js获取事件源及触发该事件的对象
2013/10/24 Javascript
PHP使用方法重载实现动态创建属性的get和set方法
2014/11/17 Javascript
怎样判断jQuery当前元素是隐藏还是显示
2016/11/23 Javascript
Bootstrap显示与隐藏简单实现代码
2017/03/06 Javascript
JavaScript 隐性类型转换步骤浅析
2018/03/15 Javascript
JavaScript 高性能数组去重的方法
2018/09/20 Javascript
如何对react hooks进行单元测试的方法
2019/08/14 Javascript
layui--js控制switch的切换方法
2019/09/03 Javascript
微信小程序图片加载失败时替换为默认图片的方法
2019/12/09 Javascript
jQuery实现回到顶部效果
2020/10/19 jQuery
Python设计模式之桥接模式原理与用法实例分析
2019/01/10 Python
Python 最强编辑器详细使用指南(PyCharm )
2019/09/16 Python
jupyter notebook参数化运行python方式
2020/04/10 Python
TensorFlow固化模型的实现操作
2020/05/26 Python
简述 Python 的类和对象
2020/08/21 Python
LightInTheBox西班牙站点:全球商品在线采购
2016/09/22 全球购物
官方授权图形T恤和服装:Fifth Sun
2019/06/12 全球购物
What's the difference between an interface and abstract class? (接口与抽象类有什么区别)
2012/10/29 面试题
学习雷锋做美德少年寄语大全
2014/04/09 职场文书
教师考察材料范文
2014/06/03 职场文书
学校教师安全责任书
2014/07/23 职场文书
机关党建工作汇报材料
2014/08/20 职场文书
党的群众路线批评与自我批评范文
2014/10/16 职场文书
医院护士工作检讨书
2014/10/26 职场文书
教师群众路线学习心得体会
2014/11/04 职场文书
2015年母亲节活动总结
2015/02/10 职场文书
工程服务质量承诺书
2015/04/29 职场文书
会计专业2019暑假实习报告
2019/06/21 职场文书
MySQL之MyISAM存储引擎的非聚簇索引详解
2022/03/03 MySQL