并不是所有的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. 清除PDF里的元数据和机密信息的方法

    相信很多人都知道,PDF文档的表现形式可以大不相同,它们可能包含某些数据,乍一看根本看不见,那些数据可能是不适合共享的信息-比如元数据(作者.主题.关键词).书签.扫描文档里的文本层等,通过ABBYY ...

  2. sql server 如何在一个数据库中操作另一个数据库中的数据

    INSERT INTO T1 SELECT   * FROM      OPENDATASOURCE(          'SQLOLEDB',          'Data Source=Serve ...

  3. SQL Server 备份故障

    故障信息如下: 标题: Microsoft SQL Server Management Studio------------------------------备份 对于 服务器“*******”失败 ...

  4. windows系统安装MongoDB

    最近一直在学习node.js,nodejs开发指南中有一个微博的web开发项目,由于该书出的比较早(2012出的),目前为止利用nodejs进行web开发各种组合技术都发生了很大的更新,例如书中选择的 ...

  5. java指针

    import java.util.ArrayList; import java.util.List; public class TestPoint { public static void main( ...

  6. .net平台的RSA实现以及与Delphi之间的互操作性

    .net平台下面的RSA算法实现是RSACryptoServiceProvider,如果安装了 Microsoft Enhanced Cryptographic Provider,则 RSACrypt ...

  7. HackerRank "No Prefix Set"

    Typical Trie usage. But please note that it could be any order of input strings. #include <algori ...

  8. IntelliJ IDEA中如何设置同时打开多个文件且分行显示?

    Window→Editor Tabs→Tabs Placement→Show Tabs in Single Row 取消选中后即可在多行显示 下图为实际显示效果:  还可以自行设置打开文件窗口数(默认 ...

  9. 【log】logback.xml

    <?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- 控制台 - ...

  10. [vim]VIM快捷键整理

    转自:http://blog.csdn.net/ceven2010/article/details/7406341#comments 一.移动光标 1.左移h.右移l.下移j.上移k 2.向下翻页ct ...