zoukankan      html  css  js  c++  java
  • 使用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
  • 相关阅读:
    hlgoj 1766 Cubing
    Reverse Linked List
    String to Integer
    Bitwise AND of Numbers Range
    Best Time to Buy and Sell Stock III
    First Missing Positive
    Permutation Sequence
    Next Permutation
    Gray Code
    Number of Islands
  • 原文地址:https://www.cnblogs.com/chen110xi/p/5817101.html
Copyright © 2011-2022 走看看