【问题标题】:unzip the file and parse it to js解压文件并解析为js
【发布时间】:2013-08-17 14:55:27
【问题描述】:

您好,我曾尝试从我的 C 盘解压缩文件并尝试解析为 javascript 对象 这是代码

var AdmZip = require('adm-zip');
var fs = require('fs'), xml2js = require('xml2js');
var parser = new xml2js.Parser();
var paramdata = 'c:/sample/kusuma.zip';
console.log(paramdata);
var zip = new AdmZip(paramdata);
var zipEntries = zip.getEntries();
var obj = [];
var count = 0;
zipEntries.forEach(function(zipEntry) {
    var len = zipEntries.length;
    console.log(zipEntry.toString());
    console.log(zipEntry.entryName);
    fs.readFile("", function(err, data) {
        console.log(data);
        parser.parseString(data, function(err, result) {
            count++;
            console.log(count);
            obj.push(result);

            if (count === len) {
                console.log(obj);
                res.send(obj);
            }

        });
    });

});

请检查一下代码并提供更多示例

【问题讨论】:

    标签: node.js


    【解决方案1】:

    嗯,fs.readFile() 用于读取本身直接在磁盘上的文件,而这些文件不是。

    但是,adm-zip 已经在读取.zip 的内容,因此您不需要fs。每个zipEntry 都有getData()getDataAsync() 可用于检索内容的方法。

    zipEntries.forEach(function (zipEntry) {
        zipEntry.getDataAsync(function (data) {
            parser.parseString(data, function (err, result) {
                console.log(result);
            });
        });
    });
    

    此外,由于zipEntriesArray,您可以使用.filter() 将其缩减为仅XML 文件。

    var zipEntries = zip.getEntries().filter(function (zipEntry) {
        return !zipEntry.isDirectory && /\.xml$/.test(zipEntry.entryName);
    });
    

    您还需要从集合而不是每个条目中确定一次len。您还可以针对使用 obj.length 进行测试,而不必单独保留 count

    var len = zipEntries.length;
    var obj = [];
    
    zipEntries.forEach(function (zipEntry) {
        zipEntry.getDataAsync(function (data) {
            parser.parseString(data, function (err, result) {
                obj.push(result);
    
                if (obj.length === len) {
                    res.send(obj);
                }
            });
        });
    });
    

    【讨论】:

      猜你喜欢
      • 2011-06-17
      • 1970-01-01
      • 1970-01-01
      • 2019-05-07
      • 1970-01-01
      • 1970-01-01
      • 2017-05-12
      • 2021-03-07
      • 2018-02-12
      相关资源
      最近更新 更多