JavaScript实现的XML与JSON互转功能详解

yizhihongxing

JavaScript实现的XML与JSON互转功能详解

近年来,JSON已经成为了web开发中常用的数据格式,而XML在一些特定领域也有着广泛应用。在web开发中,我们有时需要将XML数据转换为JSON格式,或者将JSON格式转换为XML数据,这就需要用到JavaScript实现的XML和JSON互转功能。

什么是XML

XML是可扩展标记语言(Extensible Markup Language)的简称。它是一种由W3C推荐的标记语言,用于描述数据结构,其本质是一种文本格式。与HTML类似,XML通过标签来描述数据。XML文档中包含的元素结构具有可扩展性,允许用户自定义标签。这使得XML可以在各种系统和平台之间传递和共享数据。

下面是一个简单的XML示例:

<?xml version="1.0" encoding="UTF-8"?>
<book>
  <title>JavaScript: The Good Parts</title>
  <author> Douglas Crockford</author>
  <price>20.00</price>
</book>

什么是JSON

JSON是JavaScript Object Notation的简称,它是一种轻量级的数据交换格式,常用于web开发中传递数据。JSON数据格式以键值对的形式表示,使用大括号{}和方括号[]来表示对象和数组。

下面是一个简单的JSON示例:

{
  "title": "JavaScript: The Good Parts",
  "author": "Douglas Crockford",
  "price": 20.00
}

JavaScript实现XML与JSON互转

JavaScript实现XML和JSON的互转功能,需要使用两个内置对象:XMLHttpRequest和DOMParser。XMLHttpRequest用于处理XML数据,DOMParser可以将XML数据转换为DOM对象。

将XML转换为JSON

将XML转换为JSON,首先需要将XML数据解析为DOM对象,然后通过遍历DOM对象,将其转换为JavaScript对象,最后使用JSON.stringify将JavaScript对象转换为JSON字符串。

以下是将上面XML示例转换为JSON的代码:

let xml = `<?xml version="1.0" encoding="UTF-8"?>
<book>
  <title>JavaScript: The Good Parts</title>
  <author> Douglas Crockford</author>
  <price>20.00</price>
</book>`;

let parser = new DOMParser();
let xmlDoc = parser.parseFromString(xml, "text/xml");

let book = {};
let bookElement = xmlDoc.getElementsByTagName("book")[0];
for (let i = 0; i < bookElement.childNodes.length; i++) {
  let node = bookElement.childNodes[i];
  if (node.nodeType === 1) {
    book[node.nodeName] = node.childNodes[0].nodeValue;
  }
}

let json = JSON.stringify(book);
console.log(json);

输出结果:

{
  "title": "JavaScript: The Good Parts",
  "author": " Douglas Crockford",
  "price": "20.00"
}

将JSON转换为XML

将JSON转换为XML,需要先使用JSON.parse将JSON字符串解析为JavaScript对象,然后通过创建DOM对象,将JavaScript对象转换为DOM对象,最后使用XMLSerializer将DOM对象转换为XML字符串。

以下是将上面JSON示例转换为XML的代码:

let json = `{
  "title": "JavaScript: The Good Parts",
  "author": "Douglas Crockford",
  "price": 20.00
}`;

let book = JSON.parse(json);

let xmlDoc = document.implementation.createDocument(null, "book", null);

let bookElement = xmlDoc.getElementsByTagName("book")[0];

for (let key in book) {
  let element = xmlDoc.createElement(key);
  let text = xmlDoc.createTextNode(book[key]);
  element.appendChild(text);
  bookElement.appendChild(element);
}

let serializer = new XMLSerializer();
let xmlString = serializer.serializeToString(xmlDoc);
console.log(xmlString);

输出结果:

<?xml version="1.0" encoding="utf-8"?>
<book>
  <title>JavaScript: The Good Parts</title>
  <author>Douglas Crockford</author>
  <price>20</price>
</book>

示例说明

下面给出两个示例说明。

示例一

XML数据:

<?xml version="1.0" encoding="UTF-8"?>
<company>
  <employee>
    <name>张三</name>
    <age>24</age>
    <position>工程师</position>
  </employee>
  <employee>
    <name>李四</name>
    <age>30</age>
    <position>经理</position>
  </employee>
</company>

将XML数据转换为JSON:

let xml = `<?xml version="1.0" encoding="UTF-8"?>
<company>
  <employee>
    <name>张三</name>
    <age>24</age>
    <position>工程师</position>
  </employee>
  <employee>
    <name>李四</name>
    <age>30</age>
    <position>经理</position>
  </employee>
</company>`;

let parser = new DOMParser();
let xmlDoc = parser.parseFromString(xml, "text/xml");

let company = {};
let companyElement = xmlDoc.getElementsByTagName("company")[0];
let employees = [];
for (let i = 0; i < companyElement.childNodes.length; i++) {
  let node = companyElement.childNodes[i];
  if (node.nodeType === 1 && node.nodeName === "employee") {
    let employee = {};
    for (let j = 0; j < node.childNodes.length; j++) {
      let childNode = node.childNodes[j];
      if (childNode.nodeType === 1) {
        employee[childNode.nodeName] = childNode.childNodes[0].nodeValue;
      }
    }
    employees.push(employee);
  }
}
company.employees = employees;

let json = JSON.stringify(company);
console.log(json);

输出结果:

{
  "employees": [
    {
      "name": "张三",
      "age": "24",
      "position": "工程师"
    },
    {
      "name": "李四",
      "age": "30",
      "position": "经理"
    }
  ]
}

示例二

JSON数据:

{
  "employees": [
    {
      "name": "张三",
      "age": "24",
      "position": "工程师"
    },
    {
      "name": "李四",
      "age": "30",
      "position": "经理"
    }
  ],
  "companyName": "ABC公司"
}

将JSON数据转换为XML:

let json = `{
  "employees": [
    {
      "name": "张三",
      "age": "24",
      "position": "工程师"
    },
    {
      "name": "李四",
      "age": "30",
      "position": "经理"
    }
  ],
  "companyName": "ABC公司"
}`;

let company = JSON.parse(json);

let xmlDoc = document.implementation.createDocument(null, "company", null);

let companyElement = xmlDoc.getElementsByTagName("company")[0];

let employeesElement = xmlDoc.createElement("employees");

for (let i = 0; i < company.employees.length; i++) {
  let employee = company.employees[i];
  let employeeElement = xmlDoc.createElement("employee");
  let nameElement = xmlDoc.createElement("name");
  let nameText = xmlDoc.createTextNode(employee.name);
  nameElement.appendChild(nameText);
  employeeElement.appendChild(nameElement);

  let ageElement = xmlDoc.createElement("age");
  let ageText = xmlDoc.createTextNode(employee.age);
  ageElement.appendChild(ageText);
  employeeElement.appendChild(ageElement);

  let positionElement = xmlDoc.createElement("position");
  let positionText = xmlDoc.createTextNode(employee.position);
  positionElement.appendChild(positionText);
  employeeElement.appendChild(positionElement);

  employeesElement.appendChild(employeeElement);
}

companyElement.appendChild(employeesElement);

let companyNameElement = xmlDoc.createElement("companyName");
let companyNameText = xmlDoc.createTextNode(company.companyName);
companyNameElement.appendChild(companyNameText);
companyElement.appendChild(companyNameElement);

let serializer = new XMLSerializer();
let xmlString = serializer.serializeToString(xmlDoc);
console.log(xmlString);

输出结果:

<?xml version="1.0" encoding="UTF-8"?>
<company>
  <employees>
    <employee>
      <name>张三</name>
      <age>24</age>
      <position>工程师</position>
    </employee>
    <employee>
      <name>李四</name>
      <age>30</age>
      <position>经理</position>
    </employee>
  </employees>
  <companyName>ABC公司</companyName>
</company>

总结

JavaScript实现XML和JSON的互转功能,可以使用XMLHttpRequest和DOMParser将XML转换为JavaScript对象,然后使用JSON.stringify将JavaScript对象转换为JSON字符串;使用JSON.parse将JSON字符串转换为JavaScript对象,然后创建DOM对象将JavaScript对象转换为DOM对象,最后使用XMLSerializer将DOM对象转换为XML字符串。在实际应用中,根据所需数据的格式,选择XML或JSON进行数据交互。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript实现的XML与JSON互转功能详解 - Python技术站

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

相关文章

  • 结构型-代理模式

    定义   代理是一个中间者的角色,如生活中的中介,出于种种考虑/限制,一个对象不能直接访问另一个对象,需要一个第三者(中间代理)牵线搭桥从而间接达到访问目的,这样的就是代理模式。 es6 中的代理  es6 的 proxy 就是上面说的代理模式的实现,es6 帮我们在语法层面提供了这个新的api,让我们可以很轻松的就使用了代理模式。 const p = ne…

    JavaScript 2023年4月18日
    00
  • js获取Get值的方法

    下面是关于“JS获取Get值的方法”的完整攻略: 什么是Get请求 在Web开发中,我们常常需要通过URL传输数据。传输的方式有两种,一种是GET请求,另一种是POST请求。其中,GET请求通常用于获取数据,POST请求则通常用于提交数据。在GET请求中,数据是通过URL传递的,因此可以通过解析URL中的参数来获取数据。 JS获取Get值的方法 在JavaS…

    JavaScript 2023年5月28日
    00
  • 积累比较常用的正则表达式(例如:匹配中文、匹配html)

    Markdown格式的文本有一些基本规则。比如,使用#、##、###等#符号表示章节标题,使用*、-、+等符号表示无序列表,使用>符号表示引用等。下面,我将详细讲解“积累比较常用的正则表达式”的攻略: 1. 正则表达式基础 正则表达式是用来匹配字符串及其组成部分的一种模式化方法。正则表达式主要包括以下几个元素:1. 原义字符:表示字符本身,如a表示字母…

    JavaScript 2023年6月10日
    00
  • JavaScript实现公告栏上下滚动效果

    下面是详细讲解“JavaScript实现公告栏上下滚动效果”的完整攻略。 概述 公告栏上下滚动效果是一个常见的网页特效,可以通过JavaScript实现。具体来说,当一组公告内容超出公告栏的显示范围时,可以让公告内容向上或向下滚动,以便显示所有内容。实现这一效果需要用到JavaScript的定时器、DOM操作、CSS样式等知识点。 实现步骤 下面介绍实现公告…

    JavaScript 2023年6月11日
    00
  • 轻量级的原生js日历插件calendar.js使用指南

    轻量级的原生js日历插件calendar.js使用指南 什么是calendar.js? calendar.js是一款轻量级的原生JavaScript日历插件,不依赖任何第三方库,可快速集成到你的网站或应用中。 如何使用calendar.js? 步骤一:引入calendar.js文件 将calendar.js文件引入到你的网页中。 <script src…

    JavaScript 2023年5月27日
    00
  • js实现抽奖的两种方法

    下面给出JS实现抽奖的两种方法的完整攻略。 方法一:用Math.random()生成随机数 1.创建一个数组,用来存储奖品种类和对应的中奖概率,例如: let awards = [ {name: ‘一等奖’, probability: 0.1}, {name: ‘二等奖’, probability: 0.2}, {name: ‘三等奖’, probabili…

    JavaScript 2023年6月11日
    00
  • ahooks封装cookie localStorage sessionStorage方法

    介绍ahooks ahooks是一个封装好的React Hooks库,提供了很多常用的Hooks封装,可以帮助我们快速地开发Web应用。在ahooks中,有一个useCookieHooks可以用来操作cookie。如果要操作localStorage或sessionStorage,可以通过封装实现。 封装localStorage的方法 import { use…

    JavaScript 2023年6月11日
    00
  • 简单了解JavaScript中的new Function

    下面是有关JavaScript中的new Function的详细解释和示例: 什么是new Function? new Function是JavaScript语言中的一种特殊语法,它可以使用字符串的形式来动态创建一个函数。 语法格式如下: new Function([param1, param2, …paramN], functionBody) 其中,p…

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