2016-11-17 89 views
0

在我的server.js文件中,我创建了一个HTTP GET请求,假设它返回xml。当我将GET请求的响应记录到控制台时,它是含有大量问号和黑色菱形的乱码,如下图所示:enter image description here如何在node.js中使用xml文件?

当我使用我在GET中使用的相同url请求,我在浏览器中打开它,它会自动下载一个gzip文件,该文件解压缩后会包含一个带有数据的清晰xml文件(位于我的文本编辑器内)。

如何在我的server.js文件中以正确的格式获取xml?我需要在我的程序中使用它,而不是在文本编辑器中(显然)。

这里是我的GET请求:

axios.get('http://www2.jobs2careers.com/feed.php?id=1237-2595&c=1&pass=HeahE0W1ecAkkF0l') 
    .then(function(response) { 
    console.log(response.data); 
    }); 

我试着使用targz库提取gzip文件,如下图所示:

axios.get('http://www2.jobs2careers.com/feed.php?id=1237-2595&c=1&pass=HeahE0W1ecAkkF0l') 
    .then(function(response) { 
    targz().extract(response.data, '/data', function(err){ 
     if (err) { 
     console.log('Something is wrong ', err.stack); 
     } 
     console.log('Job done!'); 
    }); 
    }); 

我在控制台中说的错误: “路径必须是一个没有空字节的字符串”。我应该从targz使用提取方法还是仅仅使用它不正确?我试图“提取”或解压缩response.data。

+0

答案就在你的问题:响应不是一个XML文件,这是一个gzip文件。您需要一个可以提取它的节点模块。这里有一个:https://www.npmjs.com/package/tar.gz –

+0

你也有zlib https://nodejs.org/api/zlib.html#zlib_class_zlib_gzip –

+0

可能的重复:http://stackoverflow.com/questions/12148948/how-do-i-ungzip-decompress -a-nodejs-requests-module-gzip-response-body – jgozal

回答

1

在此基础上:Simplest way to download and unzip files in Node.js cross-platform?

var feedURL = 'http://www2.jobs2careers.com/feed.php?id=1237-2595&c=1&pass=HeahE0W1ecAkkF0l'; 

var request = require('request'), 
    zlib = require('zlib'), 
    fs = require('fs'), 
    out = fs.createWriteStream('./feed.xml'); 

request(feedURL).pipe(zlib.createGunzip()).pipe(out); 
+0

这是迄今为止最简单的答案,再加上它的作品。 – Mjuice

0

从更新后的代码看来,您需要将第一个参数(response.data)设置为gzip文件的文件系统上的路径,因此为null字节错误。我会考虑写入文件系统,然后提取,或另一个模块,它可以让你从网址中提取。

当您从提取的gzip文件(您位于正确的路径,没有双关语意图)中获取XML时,可以使用节点模块,如xml2js,它将xml解析为Javascript对象,并使它很容易处理。

+0

所以我想出了如何解压缩文件,现在它以feed.xml的形式保存在我的根目录中。我想使用xml2js将该xml转换为JSON。在xml2js的文档中,他们给出了这个例子: var parseString = require('xml2js')。parseString; var xml =“ Hello xml2js!” parseString(xml,function(err,result){ console.dir(result); }); 变量xml被设置为一个字符串。如何将xml设置为我的文件的名为feed.xml的值? – Mjuice

+0

我假设你已经在本地保存了feed.xml文件。从这里开始,您可以使用[fs.readFileSync()](https://nodejs.org/api/fs.html#fs_fs_readfilesync_file_option)设置为xml变量,然后以字符串形式解析它。 –

+0

我会尝试readFileSync,我还没有尝试过。 – Mjuice

相关问题