2017-02-15 63 views
0

我有這種方法,我收到來自遠程服務器的XML響應,我需要將XML轉換成JSON,使角2可以與數據的工作:角:將XML轉換成JSON

private extractData(res: Response) { 
    let xml = res["_body"] 
    console.log(xml); 
    var parser = require('xml2json'); 
    var json = parser.toJson(xml); 
    return json 
    } 

我我試圖使用這個節點模塊: https://www.npmjs.com/package/xml2json

現在這個節點模塊是用javascript(而不是TypeScript)編寫的,所以我不確定我是否可以在Angular 2應用程序中使用它。

我得到這個編譯錯誤:

ERROR in ./~/isemail/lib/index.js Module not found: Error: Can't resolve 'dns' in '/Users/user/ebayTool/node_modules/isemail/lib' @ ./~/isemail/lib/index.js 5:12-26 @ ./~/joi/lib/string.js @ ./~/joi/lib/index.js @ ./~/xml2json/lib/xml2json.js @ ./~/xml2json/lib/index.js @ ./~/xml2json/index.js @ ./src/app/hero.service.ts @ ./src/app/app.component.ts @ ./src/app/app.module.ts @ ./src/main.ts @ multi webpack-dev-server/client? http://localhost:4200/ ./src/main.ts webpack: Failed to compile.

所以我的問題是如何將XML轉換成JSON在角2,我該如何正確導入xml2json節點模塊在我的項目中使用?

回答

2

如果您使用angular-cli引導您的應用程序 - 它已隨節點模塊轉換xml。

https://github.com/Leonidas-from-XIV/node-xml2js

所以你不需要添加額外的模塊這一點。因爲它是經典CommonJS的模塊 - 你需要使用require將其導入:

let parseString = require('xml2js').parseString; 

所以,你的代碼可以是這樣的:

let parseString = require('xml2js').parseString; 
let xml = "<root>Hello xml2js!</root>" 

parseString(xml, function (err, result) { 
    console.dir(result); 
}); 

你將得到一個輸出:

enter image description here

在任何情況下 - 如果您甚至不使用angular-clior想要使用您的preffered模塊來解析xml - 請使用require加載它。

+0

謝謝!所以我確實使用了Angular CLI來引導我的應用程序。 – etayluz

+0

當我嘗試使用xml2js模塊時,出現以下錯誤。 03-17 02:37:48.190:V/JS(7130):error :::錯誤:com.tns.NativeScriptException:無法找到模塊:「events」,相對於:app/tns_modules/03-17 02:37 :48.190:V/JS(7130):com.tns.Module.resolvePathHelper(Module.java:159)03-17 02:37:48.190:V/JS(7130):com.tns.Module.resolvePath(Module。 java:60)03-17 02:37:48.190:V/JS(7130):com.tns.Runtime.callJSMethodNative(Native Method) – dreamdeveloper

+0

我收到類似的問題給@dreamdeveloper - 'xml2js'模塊依賴於'events'和'timers',它們是在NodeJS模塊中構建的,在客戶端不適用於Angular。 – Chad