2017-02-15 108 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