OurJS


OurJS-我们的JS, 我们的技术-IT文摘; 专注JS相关领域;
我们热爱编程, 我们热爱技术;我们是高大上, 有品味的码农;

欢迎您订阅我们的技术周刊


我们会向您分享我们精心收集整理的,最新的行业资讯,技术动态,外文翻译,热点文章;
我们使用第三方邮件列表向您推送,我们不保存您的任何个人资料,注重您的隐私,您可以随时退订,

欢迎分享您的观点,经验,技巧,心得

让我们一起找寻程序员的快乐,探索技术, 发现IT人生的乐趣;


本网站使用缓存技术每次加载仅需很小流量, 可在手机中流畅浏览;
如果您发现任何BUG,请即时告知我们: ourjs(at)ourjs.com

使用NodeJS将XML解析成JSON及性能比较


分享到
分类 JS学习   关键字 Node.JS   发布 ourjs  1420938892662
注意 转载须保留原文链接,译文链接,作者译者等信息。  
并不是所有的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



原文地址: 点此
社区评论 ( Beta版 )
  • #0 杨纤劝 1445937446694

    f

  • #1 魏江天 1446510092240

    xml2js.parseString(xmlStr, { explicitArray : false, ignoreAttrs : true }, callbackMethod); 写在哪里啊

  • #2 程石负 1446793485253

    @魏江天 #1

    parseString(xml, { explicitArray : false, ignoreAttrs : true }, function (err, result) { console.dir(JSON.stringify(result)); });

  • #3 袁记失 1487238032653

    sb

  • #4 毕闯必 1487238068553

    支持你

OnceDoc 您自己的企业内容管理系统——文档、流程、知识库、报表、网盘All In One

访问404页面,寻找丢失儿童
 热门文章 - 分享最多
  1. 2014年最受欢迎的前十大语言:JavaScript、PHP、Java排前三
  2. 主流JavaScript MVC框架性能比较测试:Angular vs Backbone vs Ember
  3. AngularJS在大型单页面应用中的性能优化(一)
  4. CSS3实现的响应式字体:自适应视图窗口大小的新单位
  5. JavaScript代码组织结构良好的5个特点[reuqire.js]
  6. io.js新图标logo征集中
  7. 5个现在就该使用的数组Array方法: indexOf/filter/forEach/map/reduce详解
  8. AngularJS在大型单页面应用中的性能优化(二)
  9. 在JavaScript的Array数组中调用一组Function方法
  10. WebPack:更优秀的模块依赖管理工具,及require.js的缺陷
  11. AirJD-简单好用的免费建站工具

 相关阅读 - JS学习
  1. NodeJS解析服务器返回的XML及性能比较
  2. 5个现在就该使用的数组Array方法: indexOf/filter/forEach/map/reduce详解
  3. AngularJS在大型单页面应用中的性能优化(二)
  4. AngularJS在大型单页面应用中的性能优化(一)
  5. WebPack:更优秀的模块依赖管理工具,及require.js的缺陷
  6. 在JavaScript的Array数组中调用一组Function方法
  7. 2015年的JavaScript:Angular之类的框架将被库取代
  8. 什么是IndexedDB:Web离线数据库入门简介及基础教程
  9. Node.JS编码规范指南教程:教你优雅地写JavaScript代码
  10. JavaScript的设计缺陷?浮点运算:0.1 + 0.2 != 0.3

 关键字 - Node.JS
  1. Express入门教程:一个简单的博客
  2. Node.JS中如何判断递归嵌套的所有回调函数已经执行完毕,以读取目录下所有文件为例:计数比Promise方式快将近一倍
  3. Node.JS 8.x和9.x新特性:N-API,NPM5,ERROR CODE
  4. Node.JS读取中文TXT编码文件显示乱码问题解决方案
  5. Node.js框架之express
  6. 在nodejs中使用Redis缓存和查询数据及Session持久化(Express)
  7. Node.JS编码规范指南教程:教你优雅地写JavaScript代码
  8. NodeJS动态传参特性:不定个数参数的省略,默认值与解构
  9. Debug调试Node.JS:我们是如何定位内存泄漏和无限循环的
  10. 6款基于Node.JS的开源内容管理和静态网站生成系统

 欢迎订阅 - 技术周刊

我们热爱编程, 我们热爱技术; 我们是高端, 大气, 上档次, 有品味, 时刻需要和国际接轨的码农; 欢迎您订阅我们的技术周刊; 您只需要在右上角输入您的邮箱即可; 我们注重您的隐私,您可以随时退订.
加入我们吧! 让我们一起找寻码农的快乐,探索技术, 发现IT人生的乐趣;


 关注我们

我们的微信公众号: ourjs-com
打开微信扫一扫即可关注我们:
IT文摘-程序员(码农)技术周刊

ourjs官方微信号