如何在node.js中使用xml文件?

时间:2016-11-17 23:24:04

标签: javascript xml node.js

在我的server.js文件中,我发出一个HTTP GET请求,假设它返回xml。当我记录GET请求对控制台的响应时,它是含有大量问号和黑色钻石的乱码,如下图所示:enter image description here

当我使用我在GET请求中使用的相同网址并在浏览器中打开它时会自动下载一个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!');
    });
  });

我在控制台中收到错误消息:" Path必须是没有空字节的字符串"。我应该使用targz的提取方法还是我只是错误地使用它?我试图"提取"或解压缩response.data。

2 个答案:

答案 0 :(得分:2)

基于此:new sort.go

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);

答案 1 :(得分:0)

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

当你从提取的gzip文件中获取XML时(你在正确的路径上,没有双关语),你可以使用一个节点模块,如xml2js,它将xml解析成一个Javascript对象,使其易于使用。