并不是所有的API都是以JSON格式返回的。我们有时侯不得不处理一些XML。幸运的是有一个NodeJS模块 xml2js 可以帮你做这件事。
 
比如,我们要处理下面这段XML
 
<?xml version="1.0" encoding="UTF-8" ?> <business>     <company>Code Blog</company>     <owner>Nic Raboy</owner>     <employee>         <firstname>Nic</firstname>         <lastname>Raboy</lastname>     </employee>     <employee>         <firstname>Maria</firstname>         <lastname>Campos</lastname>     </employee> </business>
 
 
现在创建一个项目目录,添加一个JavaScript文件,它会进行,如果你使用Terminal,你就可以这样:
 
mkdir TestApp cd TestApp touch app.js
 
最关键的一点是安装xml2js库,所以你可以在命令行输入
 
npm install xml2js
 
安装成功之后你会在当前目录发现一个 node_modules目录,里面有一个xml2js。
 
在app.js中添加如下内容:
 
var parseString = require('xml2js').parseString; var xml = '<?xml version="1.0" encoding="UTF-8" ?><business><company>Code Blog</company><owner>Nic Raboy</owner><employee><firstname>Nic</firstname><lastname>Raboy</lastname></employee><employee><firstname>Maria</firstname><lastname>Campos</lastname></employee></business>'; parseString(xml, function (err, result) {     console.dir(JSON.stringify(result)); });
 
 
现在你可以用Node.JS运行你的应用了,使用下面的命令:
 
node app.js
 
如果一切顺利你会得到JSON格式的输出:
 
{     "business": {         "company": [ "Code Blog" ],         "owner": [ "Nic Raboy" ],         "employee": [             {                 "firstname": [ "Nic" ],                 "lastname": [ "Raboy" ]             },             {                 "firstname": [ "Maria" ],                 "lastname": [ "Campos" ]             }         ]     } }
 

有一点需要注意,XML字符串元素转换成了JSON的数组。你可能期望 { owner: "Nic Raboy" } 但实际输出的是 { owner: [ "Nic Raboy" ] },但这不是什么大问题。
注* 可以通过 explicitArray: false 来解决:

xml2js.parseString(xmlStr, { explicitArray : false, ignoreAttrs : true }, callbackMethod);

性能比较

有人指出xml2js的速度过慢,有人做过性能测试, htmlparser2  的性能提升大约5倍以上,如下图 ,测试地址

另外还有一个使用C语言写的xml解析器node-expat,性能更好,
安装

npm i node-expat
 

不过使用也很“底层“, 对性能有一定要求的应用可以尝试一下:

(function () {
"use strict"; var expat = require('node-expat')
var parser = new expat.Parser('UTF-8') parser.on('startElement', function (name, attrs) {
console.log(name, attrs)
}) parser.on('endElement', function (name) {
console.log(name)
}) parser.on('text', function (text) {
console.log(text)
}) parser.on('error', function (error) {
console.error(error)
}) parser.write('<html><head><title>Hello World</title></head><body><p>Foobar</p></body></html>') }())

不过还有一些项目对 expat 进行了封装,简化了调用接口,比如: xml2obj-stream

 
http://ourjs.com/detail/54b1ce8c232227083e000004

使用NodeJS将XML解析成JSON及性能比较的更多相关文章

  1. 如何在ASP.NET中用C#将XML转换成JSON

    本文旨在介绍如果通过C#将获取到的XML文档转换成对应的JSON格式字符串,然后将其输出到页面前端,以供JavaScript代码解析使用.或许你可以直接利用JavaScript代码通过Ajax的方式来 ...

  2. 如何在ASP.NET中用C#将XML转换成JSON 【转】

      本文旨在介绍如果通过C#将获取到的XML文档转换成对应的JSON格式字符串,然后将其输出到页面前端,以供JavaScript代码解析使用.或许你可以直接利用JavaScript代码通过Ajax的方 ...

  3. JS中将JSON的字符串解析成JSON数据格式《转》

    在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval()函数. 2. 使用Function对象来进行返回解析. 使用eval函数来解析,并且使用jquery的ea ...

  4. C#将XML转换成JSON转换XML

    原文:C#将XML转换成JSON转换XML using System; using System.Collections.Generic; using System.Linq; using Syste ...

  5. JSON字符串解析成JSON数据格式

    在JS中将JSON的字符串解析成JSON数据格式,一般有两种方式: 1.一种为使用eval()函数. 2. 使用Function对象来进行返回解析. 使用eval函数来解析,并且使用jquery的ea ...

  6. C#将XML转换成JSON 使用 JavaScript 将 XML 转成 JSON

    如何在ASP.NET中用C#将XML转换成JSON [JavaScript]代码 // Changes XML to JSON function xmlToJson(xml) { // Create ...

  7. Oracle使用Sql把XML解析成表(Table)的方法

    SELECT * FROM XMLTABLE('$B/DEAL_BASIC/USER_DEAL_INFO' PASSING XMLTYPE('<?xml version="1.0&qu ...

  8. VBScript把json字符串解析成json对象的2个方法

    这篇文章主要介绍了VBScript把json字符串解析成json对象的2个方法,本文通过MSScriptControl.ScriptControl和jscript实现,需要的朋友可以参考下 asp/v ...

  9. 利用python将excel数据解析成json格式

    利用python将excel数据解析成json格式 转成json方便项目中用post请求推送数据自定义数据,也方便测试: import xlrdimport jsonimport requests d ...

随机推荐

  1. 开源App之MyHearts(二)

    前言 小弟技术有限,有的地方也是自己摸索出来的,可能和大神们写的好的代码没法比,但是我会努力的.要对自己说下,加油!! 此次更新 1.集成QQ登录完成 集成QQ登录网上写的介绍已经很多了,这里就不详细 ...

  2. PHP快速排序及其时间复杂度

    <?php function quickSort(&$arr, $l, $r) { if (count($arr)<2 || $l>$r) return; $tmp_l = ...

  3. 如何处理ABBYY中出现错误代码142和55的问题

    在使用ABBYY FineReader 12OCR文字识别软件创建PDF文件时,有时会出现以下错误提示:内部程序错误..\Src\SpecialFontFactory.cpp,142和内部程序错误.. ...

  4. Request.RequestContext.RouteData.Values获取不到参数值

    Request.RequestContext.RouteData.Values是获取路由配置中参数的值. 如过路由配置是: public static void RegisterRoutes(Rout ...

  5. 002. C#生成GUID

    什么是GUID: 全局唯一标识符(GUID,Globally Unique Identifier)是一种由算法生成的二进制长度为128位的数字标识符.该算法使用了太网卡地址, 纳秒级时间,CPU芯片I ...

  6. JS-unicode编码转换

    JS-unicode编码转换 <script type="text/Javascript"> var toUN = { on: function(str) { var ...

  7. 解决国内无法下载SDK问题——安卓镜像服务器列表

    mirrors.opencas.cn 80  稍快ubuntu.buct.cn    80 快 Android SDK在线更新镜像服务器 大连东软信息学院镜像服务器地址: http://mirrors ...

  8. navicat for mysql 10.1.7注册码

    最近提示用的navicat for mysql 10.1.7过期了.网上翻了一翻,发现了一个可用的注册码,分享出来.多一个链接,给别人多一份选择 姓名,组织随意, 注册码都是:NAVN-LNXG-XH ...

  9. Dom选择器及操作文本内容

    文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式.我们最为关心的是,DOM把 ...

  10. java 获取实体类对象属性值的方法

    在java中我们要获得实体类对象的属性,一般情况是将实体类中的属性私有化,然后再对外提供get()与set()方法,然后再获取实体类对象的属性的时候先把对象new出来,再用变量名.get()的方法得到 ...