• javascript实现xml字符串转换json格式数据


    前言:

    公司一个老项目重构,后端返回数据为xml格式。

    而现有的前后端分离开发中,后端大部分返回的都是json格式的数据给到前端,所以前端也是直接对后端返回的json数据进行解析。

    因此就需要对老接口返回的xml数据进行转换了,看了下老项目中对xml数据解析的相关代码,有1700+行,可谓是比较恐怖了,因此决定直接将xml字符串转换成json格式,以适应现有框架。

    解决方案:

    在接口请求封装函数中对接口返回数据进行格式转换操作,页面的开发不受任何影响。

    关键代码:

     1 /**
     2  * xml字符串转换xml对象数据
     3  * @param {Object} xmlStr
     4  */
     5 function xmlStr2XmlObj(xmlStr) {
     6   var xmlObj = {};
     7   if (document.all) {
     8     var xmlDom = new ActiveXObject("Microsoft.XMLDOM");
     9     xmlDom.loadXML(xmlStr);
    10     xmlObj = xmlDom;
    11   } else {
    12     xmlObj = new DOMParser().parseFromString(xmlStr, "text/xml");
    13   }
    14   return xmlObj;
    15 }
    16 
    17 /**
    18  * xml字符串转换json数据
    19  * @param {Object} xml
    20  */
    21 function xmlObj2json(xml) {
    22   var xmlObj = xmlStr2XmlObj(xml);
    23   var jsonObj = {};
    24   if (xmlObj.childNodes.length > 0) {
    25     jsonObj = xml2json(xmlObj);
    26   }
    27   return jsonObj;
    28 }
    29 
    30 /**
    31  * xml转换json数据
    32  * @param {Object} xml
    33  */
    34 function xml2json(xml) {
    35   try {
    36     var obj = {};
    37     if (xml.children.length > 0) {
    38       for (var i = 0; i < xml.children.length; i++) {
    39         var item = xml.children.item(i);
    40         var nodeName = item.nodeName;
    41         if (typeof(obj[nodeName]) == "undefined") {
    42           obj[nodeName] = xml2json(item);
    43         } else {
    44           if (typeof(obj[nodeName].push) == "undefined") {
    45             var old = obj[nodeName];
    46             obj[nodeName] = [];
    47             obj[nodeName].push(old);
    48           }
    49           obj[nodeName].push(xml2json(item));
    50         }
    51       }
    52     } else {
    53       obj = xml.textContent;
    54     }
    55     return obj;
    56   } catch (e) {
    57     console.log(e.message);
    58   }
    59 }

    以上代码即实现了xml字符串到json格式数据的转换,后边会继续写问讲解如何在axios请求封装中进行具体操作。

  • 相关阅读:
    初识 Mysql
    Python之协程
    crm 动态一级二级菜单
    admin 后台操作表格
    crm 权限设计
    crm 公户变私户的问题 班级管理 课程管理 学习记录初始化
    crm 添加用户 编辑用户 公户和私户的展示,公户和私户的转化
    crm 数据展示 和分页思想(一)
    python django(forms组件)
    python Django 中间件介绍
  • 原文地址:https://www.cnblogs.com/xyyt/p/13037732.html
Copyright © 2020-2023  润新知