xml转json的js代码

yizhihongxing

XML转JSON是开发过程中常见的问题,有时候需要将后端返回的XML数据转换为前端需要的JSON格式。以下是XML转JSON的JS代码的详细攻略:

一、XML转JSON的原理

XML和JSON是两种不同的数据格式,因此需要编写代码将XML转换为JSON格式。XML数据以标签为基础,有嵌套的结构关系,而JSON数据则以键值对为基础,没有嵌套的结构关系。因此,将XML转成JSON需要把XML中的标签转成JSON的键,将标签中的内容转成JSON的值,最后将所有生成的键值对组成JSON对象。

二、XML转JSON的步骤

1.获取XML对象

首先需要通过XMLHttpRequest获取XML对象,例如:

let xhr = new XMLHttpRequest();

xhr.onload = function() {
  if (xhr.status == 200) {
    let xmlData = xhr.responseXML; //获取XML对象
  }
}
xhr.open('GET', 'example.xml', true);
xhr.send();

2.解析XML对象

通过DOM方式或SAX方式解析XML对象来获取标签名称和标签值,例如使用DOM方式解析XML对象:

let xmlData = xhr.responseXML;
let parser = new DOMParser();
let xmlDoc = parser.parseFromString(xmlData, "text/xml");
let rootElement = xmlDoc.documentElement;

在获取了XML对象之后,需要使用DOMParser对象将XML解析为一个文档对象(Document)。

3.转换JSON对象

解析XML对象后,需要将XML转换为JSON对象,这里举一个简单的例子,比如以下XML文件:

<?xml version="1.0" encoding="UTF-8"?>
<bookstore>
  <book category="children">
    <title>The Cat in the Hat</title>
    <author>Dr. Seuss</author>
    <year>1957</year>
  </book>
  <book category="web">
    <title>Learning XML</title>
    <author>Erik T. Ray</author>
    <year>2003</year>
  </book>
</bookstore>

使用以下代码可以将其转换为JSON对象:

function xmlToJson(xml) {
  let obj = {};

  if (xml.nodeType == 1) {
    if (xml.attributes.length > 0) {
      obj["@attributes"] = {};
      for (let i = 0; i < xml.attributes.length; i++) {
        let attribute = xml.attributes.item(i);
        obj["@attributes"][attribute.nodeName] = attribute.nodeValue;
      }
    }
  } else if (xml.nodeType == 3) {
    obj = xml.nodeValue.trim();
  }

  if (xml.hasChildNodes()) {
    for (let i = 0; i < xml.childNodes.length; i++) {
      let item = xml.childNodes.item(i);
      let nodeName = item.nodeName;

      if (typeof(obj[nodeName]) == "undefined") {
        obj[nodeName] = xmlToJson(item);
      } else {
        if (typeof(obj[nodeName].push) == "undefined") {
          let old = obj[nodeName];
          obj[nodeName] = [];
          obj[nodeName].push(old);
        }

        obj[nodeName].push(xmlToJson(item));
      }
    }
  }

  return obj;
}

let json = JSON.stringify(xmlToJson(rootElement));

通过递归遍历XML文件中的所有节点,将XML节点转化为JSON格式的数据。

转换后的JSON对象为:

{
  "bookstore": {
    "book": [
      {
        "@attributes": {
          "category": "children"
        },
        "title": "The Cat in the Hat",
        "author": "Dr. Seuss",
        "year": "1957"
      },
      {
        "@attributes": {
          "category": "web"
        },
        "title": "Learning XML",
        "author": "Erik T. Ray",
        "year": "2003"
      }
    ]
  }
}

三、XML转JSON的示例

以下是针对上述的XML文件,使用XML转JSON的JS代码的完整示例:

let xhr = new XMLHttpRequest();

xhr.onload = function() {
  if (xhr.status == 200) {
    let xmlData = xhr.responseXML;
    let parser = new DOMParser();
    let xmlDoc = parser.parseFromString(xmlData, "text/xml");
    let rootElement = xmlDoc.documentElement;

    function xmlToJson(xml) {
      let obj = {};

      if (xml.nodeType == 1) {
        if (xml.attributes.length > 0) {
          obj["@attributes"] = {};
          for (let i = 0; i < xml.attributes.length; i++) {
            let attribute = xml.attributes.item(i);
            obj["@attributes"][attribute.nodeName] = attribute.nodeValue;
          }
        }
      } else if (xml.nodeType == 3) {
        obj = xml.nodeValue.trim();
      }

      if (xml.hasChildNodes()) {
        for (let i = 0; i < xml.childNodes.length; i++) {
          let item = xml.childNodes.item(i);
          let nodeName = item.nodeName;

          if (typeof(obj[nodeName]) == "undefined") {
            obj[nodeName] = xmlToJson(item);
          } else {
            if (typeof(obj[nodeName].push) == "undefined") {
              let old = obj[nodeName];
              obj[nodeName] = [];
              obj[nodeName].push(old);
            }

            obj[nodeName].push(xmlToJson(item));
          }
        }
      }

      return obj;
    }

    let json = JSON.stringify(xmlToJson(rootElement));
    console.log(json);
  }
}
xhr.open('GET', 'example.xml', true);
xhr.send();

执行结果为:

{
  "bookstore": {
    "book": [
      {
        "@attributes": {
          "category": "children"
        },
        "title": "The Cat in the Hat",
        "author": "Dr. Seuss",
        "year": "1957"
      },
      {
        "@attributes": {
          "category": "web"
        },
        "title": "Learning XML",
        "author": "Erik T. Ray",
        "year": "2003"
      }
    ]
  }
}

另外,对于一些常用的前端框架,如Vue.js、React等都有相关的第三方库可以方便地进行XML转JSON的操作,使用时也可以考虑使用这些库来简化开发过程。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:xml转json的js代码 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • uniapp实现横屏签字版

    实现横屏签字版可以利用uniapp中的canvas以及第三方的canvas插件实现。 步骤一:安装canvas插件 在uniapp中使用canvas需要下载并安装canvas插件,下载地址为:https://ext.dcloud.net.cn/plugin?id=127 下载完成后,在uniapp项目的根目录下,打开cmd或者终端并输入如下命令: npm i…

    JavaScript 2023年6月11日
    00
  • JavaScript 实现鼠标拖动元素实例代码

    下面就给您详细讲解一下“JavaScript 实现鼠标拖动元素实例代码”的攻略。 什么是鼠标拖动元素 鼠标拖动元素是指利用鼠标对网页上的某个元素进行拖动操作,把元素从一个位置移到另一个位置。在前端开发中,鼠标拖动元素经常被用于实现拖拽排序、拖拽上传等功能。 实现鼠标拖动元素的基本步骤 实现鼠标拖动元素的基本步骤如下: 给需要拖动的元素添加鼠标按下的事件监听器…

    JavaScript 2023年6月10日
    00
  • JavaScript遍历DOM元素的常见方式示例

    当我们需要操作DOM以实现页面的交互效果时,我们需要遍历DOM元素。以下是几种常见的JavaScript遍历DOM的方式: 1. 通过节点关系遍历 在DOM中,节点之间有父子、兄弟、前后关系,利用这些关系可以方便地遍历DOM节点。主要有以下几个属性和方法: parentNode:获取当前节点的父节点; childNodes:获取当前节点的所有子节点(注意,子…

    JavaScript 2023年6月10日
    00
  • js去除重复字符串两种实现方法

    当需要去除重复的字符串时,在JavaScript中可以采用两种不同的实现方式:使用Set数据结构和使用正则表达式。 使用Set数据结构 Set是JavaScript中的一种数据结构,它可以存储不重复的数据,非常适用于去重操作。在使用Set去重时,首先需要将待去重的字符串装入Set中,然后再将Set转成数组即可。 const str = "hello…

    JavaScript 2023年5月28日
    00
  • JavaScript实现缓动动画

    当网页上的元素发生位移、大小或透明度等变化时,经常会需要添加缓动动画效果,用来让这些变化更加平滑和自然。而JavaScript可以通过改变CSS样式属性值来实现缓动动画效果,下面我将详细讲解一下JavaScript实现缓动动画的完整攻略。 步骤一:获取元素及其样式值 首先,需要获取到需要进行缓动动画的元素,以及元素的样式属性值。一般可以使用document.…

    JavaScript 2023年6月10日
    00
  • 一分钟理解js闭包

    一分钟理解JS闭包 什么是闭包 闭包是一种函数,它的特殊之处在于它可以访问在它外部定义的变量,即使在它外部函数已经执行完毕的情况下,闭包仍然可以访问外部函数的变量。 闭包的原理 当一个函数运行完毕后,函数内部的所有变量都会被销毁。但是,当一个内部函数引用了它外部函数的变量时,这些变量不会被立即销毁,而会被安全的存储在内存中。这个引用外部变量的内部函数就成为了…

    JavaScript 2023年5月27日
    00
  • JS中图片缓冲loading技术的实例代码

    下面我将详细讲解JS中图片缓冲loading技术的实例代码攻略。 1. 图片缓冲loading技术的作用 图片缓冲loading技术可以解决图片加载过慢或者图片尚未加载完成时页面出现的空白或错乱现象,使得页面更加优雅和美观。 2. 实现步骤 2.1 定义图片缓存对象 首先,我们需要定义一个空对象,用于保存本页面中所需加载的所有图片资源。 let imgObj…

    JavaScript 2023年6月11日
    00
  • JS中map和parseInt的用法详解

    下面为大家详细讲解“JS中map和parseInt的用法详解”攻略: JS中map和parseInt的用法详解 map()方法 map()方法是JS中数组原型的一种方法,可用于对数组中每个元素进行操作,返回操作后的新数组,实现方式如下: const arr = [1, 2, 3]; const newArr = arr.map((item, index) =…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部