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


    并不是所有的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
  • 相关阅读:
    linux命令 time
    linux命令 awk
    php学习十四:抽象,接口和多态
    php学习十三:其他关键字
    php学习十二:其他魔术方法
    php学习十一:组合
    php学习十:继承
    php学习九:存取器&魔术方法
    php学习八:封装
    php学习七:时间和日期
  • 原文地址:https://www.cnblogs.com/chen110xi/p/5817101.html
Copyright © 2020-2023  润新知