Angular:将XML转换为JSON

Angular: Convert XML to JSON

我有这种方法,可以从远程服务器接收XML响应,并且需要将XML转换为JSON,以便Angular 2可以处理数据:

1
2
3
4
5
6
7
 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.

所以我的问题是如何在Angular 2中将XML转换为JSON,以及如何正确导入要在项目中使用的xml2json节点模块?


如果您使用angular-cli引导您的应用程序-它已经随节点模块一起提供了转换xml的功能。

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

因此您不需要为此添加额外的模块。由于它是经典的commonJS模块-您需要使用require导入它:

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

因此您的代码可以如下所示:

1
2
3
4
5
6
let parseString = require('xml2js').parseString;
let xml ="<root>Hello xml2js!</root>"

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

您将收到下一个输出:

enter


1
2
3
4
5
6
function parseXml(xmlStr) {
    var result;
    var parser = require('xml2js');
    parser.Parser().parseString(xmlStr, (e, r) => {result = r});
    return result;
}

由于xml2js使用sax作为解析器并且是本机c模块,因此我建议使用txml。在您的捆绑包中,只有4kb,并且api非常干净:txml.parse(xmlString)

免责声明我是txml的作者。