2016-11-17 95 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

相關問題