如何使用 Express.js & Backbone 将 XML Web 服务输出转换为 Json.js



我是Node的新手.js

我遇到过许多XML 2 Json转换,但没有一个满足我的需求。在所有这些转换支持中,我得到一个或另一个错误,因为缺少某些内容并且不支持该版本。

这是我的代码:

 exports.index = function(req, res){    
   var request = require('request');
   var url = 'xml-output-throwing-url';
     request(url, function (error, response, body) {
        if (!error && response.statusCode == 200) { 
           res.json(body);
        }
     });
 };

这会将 xml 呈现为:"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"..某处...">..输出.."

用"括起来。现在我正在尝试将此输出转换为 json 并从主干网渲染它.js并以整洁的方式进行此演示。但是当我在渲染函数中使用 JSON.stringify(this.model) 时,输出将为空。

我在这里做错了什么?

如何实现这一点?

我的疑问是:我是否需要从服务器端(即从快递或主干.js将 xml 转换为 json。其中哪个最好?

提前致谢

https://github.com/buglabs/node-xml2json 听起来是一个很好的起点。

var parser = require('xml2json');
// ...
exports.index = function(req, res){    
   var request = require('request');
   var url = 'xml-output-throwing-url';
     request(url, function (error, response, body) {
        if (!error && response.statusCode == 200) { 
           var result = parser.toJson(body, {
              object: false,
              reversible: false,
              coerce: true,
              sanitize: true,
              trim: true,
              arrayNotation: false
           });
           res.set('Content-Type', 'application/json');
           res.send(result);
        }
    });
};

请注意,我使用 res.send 而不是 res.json,因为res.json将您提供给它的任何内容(在本例中为字符串!)转换为 JSON。这将导致双重转义。将res.send与适当的内容类型一起使用可避免这种情况。

您可以使用object: trueparser.toJson中获取实际的JS对象,但这意味着服务器上的额外工作:解析器将构建一个对象,res.json将立即再次序列化它。那没必要。

在服务器端进行转换具有优势,因为客户端上的 XML 处理不如 JSON 处理那样工作得那么好且无缝。