解析XML时,方法返回UNDEFINED



我正在解析Node.js类中的硬编码xml结构。问题是解析是异步完成的,这导致该方法返回默认值(null)。

function Codeorder() {
    // Hardcodet XML-tree as string
    this.order = "  <root> 
                            <order instancename="flashlibraries" opens="true" />
                                <order instancename="TESTTEST" opens="true" />
                            <order instancename="flashlibraries" opens="false" />
                        </root>";
    this.orderXML = null;
}
Codeorder.prototype.getOrderedCodepieces = function(instancename) {
    var parseString = require('xml2js').parseString;
    parseString(this.order, function (err, result) {
        return result; // This doesn't work
    });
    // Return "All OK"; 
}
module.exports = Codeorder;

如何让方法等待解析器完成,然后返回XML内容?

免责声明:您想要的可以实现,但它可能不适用于未来版本的xml2js。

Codeorder.prototype.getOrderedCodepieces = function(instancename) {
    var parseString = require('xml2js').parseString;
    var ret = {};
    parseString(this.order, {async: false}, function(err, data) {
      ret.err = err;
      ret.data = data;
    });
    if (ret.err) {
      throw ret.err;
    }
    return ret.data;
}

一旦你做了这个改变,你就可以得到你想要的数据作为getOrderedCodepieces()的返回值:

var c = new Codeorder();
var data = c.getOrderedCodepieces();
console.log(JSON.stringify(data, null, 2));

这依赖于所支持的解析器的async选项。如文档中所述,将来可能会更改:

sync(默认为false):回调应该是异步的吗?这可能是如果您的代码依赖于的同步执行,则不兼容更改回调。xml2js的未来版本可能会改变这个

最新更新