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

前端之家收集整理的这篇文章主要介绍了使用NodeJS将XML解析成JSON及性能比较前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
并不是所有的API都是以JSON格式返回的。我们有时侯不得不处理一些XML。幸运的是有一个NodeJS模块 xml2js可以帮你做这件事。

比如,我们要处理下面这段XML

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <business>
  3. <company>Code Blog</company>
  4. <owner>Nic Raboy</owner>
  5. <employee>
  6. <firstname>Nic</firstname>
  7. <lastname>Raboy</lastname>
  8. </employee>
  9. <employee>
  10. <firstname>Maria</firstname>
  11. <lastname>Campos</lastname>
  12. </employee>
  13. </business>


现在创建一个项目目录,添加一个JavaScript文件,它会进行,如果你使用Terminal,你就可以这样:

  1. mkdir TestApp
  2. cd TestApp
  3. touch app.js

最关键的一点是安装xml2js库,所以你可以在命令行输入

  1. npm install xml2js

安装成功之后你会在当前目录发现一个 node_modules目录,里面有一个xml2js。

在app.js中添加如下内容

  1. var parseString = require('xml2js').parseString;
  2. 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>';
  3. parseString(xml,function (err,result) {
  4. console.dir(JSON.stringify(result));
  5. });


现在你可以用Node.JS运行你的应用了,使用下面的命令:

  1. node app.js

如果一切顺利你会得到JSON格式的输出

  1. {
  2. "business": {
  3. "company": [ "Code Blog" ],"owner": [ "Nic Raboy" ],"employee": [
  4. {
  5. "firstname": [ "Nic" ],"lastname": [ "Raboy" ]
  6. },{
  7. "firstname": [ "Maria" ],"lastname": [ "Campos" ]
  8. }
  9. ]
  10. }
  11. }

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

注* 可以通过 explicitArray: false 来解决:

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

性能比较


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






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

安装

  1. npm i node-expat

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

  1. (function () {
  2. "use strict";
  3.  
  4. var expat = require('node-expat')
  5. var parser = new expat.Parser('UTF-8')
  6.  
  7. parser.on('startElement',function (name,attrs) {
  8. console.log(name,attrs)
  9. })
  10.  
  11. parser.on('endElement',function (name) {
  12. console.log(name)
  13. })
  14.  
  15. parser.on('text',function (text) {
  16. console.log(text)
  17. })
  18.  
  19. parser.on('error',function (error) {
  20. console.error(error)
  21. })
  22.  
  23. parser.write('<html><head><title>Hello World</title></head><body><p>Foobar</p></body></html>')
  24.  
  25. }())

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

猜你在找的XML相关文章