并不是所有的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. c++ 读写注册表

    void RegUpdate(HKEY hRootKey,LPCSTR szSubKey,LPCSTR szValueName,LPCSTR szValue) { HKEY hKey; LONG rc ...

  2. SQL2005:使用varchar(max)代替text

    SQL Server 2005 联机丛书 中文相关说明 1.在 Microsoft SQL Server 的未来版本中将删除 ntext.text 和 image 数据类型.请避免在新开发工作中使用这 ...

  3. C编码-1

    两个关键点,一个是要懂C语法,另一个要懂业务知识,即能够分解问题 字节序测试程序 不同cpu平台上字节序通常也不一样,下面写个简单的C程序,它可以测试不同平台上的字节序. 网络字节序说是大端字节序. ...

  4. CentOS 系统配置完jdk,tomcat mysql,nginx 项目发布步骤

    1.启动项目之前,一定要先启动nginx服务 重启nginx服务的命令:./nginx -s reload 2.然后启动三个tomcat的服务 3.如果只能进入tomcat,不能进入项目:把tomca ...

  5. matlab语言基础

    (一)常用命令 清空命令窗口:clc 清空工作空间:clear 打开editor:edit 查看函数的帮助信息:help 函数名  让命令窗口信息紧凑显示:format compact (二)变量与常 ...

  6. js跨域--服务器端设置

    首先低版本浏览器是不支持的,我从网上搜的是[IE8.Firefox 3.5 及其以后的版本.Chrome浏览器.Safari 4 等已经实现了] 下面主要是针对服务器端设置Access-Control ...

  7. wap图片滚动特效_无css3 元素js脚本编写

    手机图片滑动切换,网上有很多这样的例子,但都借助于其他组件,让代码混乱的不行:还有就是用到css3里的 transform:translate(x,y);移动元素,不过发现在不支持css3的设备上马上 ...

  8. SVN-钩子祥解

    钩子脚本的具体写法就是操作系统中shell脚本程序的写法,请根据自己SVN所在的操作系统和shell程序进行相应的写作 所谓钩子就是与一些版本库事件触发的程序,例如新修订版本的创建,或是未版本化属性的 ...

  9. Debian安装记录

    Fedora着实让我伤心透了.前天和昨天搞了整整两天Fedora 20的安装,午睡也没有,晚上就睡了四个小时不到,几乎尝试了所有Fedora 20的桌面版本,全部出问题了!就因为我的笔记本显卡是ATI ...

  10. 【Spring学习笔记-1】Myeclipse下Spring环境搭建

    *.hl_mark_KMSmartTagPinkImg{background-color:#ffaaff;}*.hl_mark_KMSmartTagBlueImg{background-color:# ...