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

时间:2014-02-21 06:15:01

标签: xml json node.js express

我是Node.js的新手

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

这是我的代码:

 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 = \" .. someurl ..."> .. ..输出"

其中包含""。现在我正在尝试将此输出转换为json并从backbone.js渲染它并以一种简洁的方式进行此演示。但是当我在渲染函数中使用JSON.stringify(this.model)时,输出将为空。

我在这里做错了什么?

如何实现这一目标?

我的怀疑是:我是否需要从服务器端将xml转换为json,即来自express.js或backbone。哪个最好?

先谢谢

1 个答案:

答案 0 :(得分:1)

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处理那样无缝地工作。