Javascript如何将xml2js放入函数中

时间:2018-03-08 18:32:33

标签: javascript node.js xml2js

我正在尝试导出一个将xml解析为json对象的函数。

export const parse = (body) => {
  const parser = new xml2js.Parser({explicitArray: false, trim: true});
  parser.parseString(body, (err, result) => {
    if (err) return err;
    parser.parseString(result['soapenv:Envelope']['soapenv:Body']['ns1:searchResponse'].searchReturn._, (err, result) => {
      if (err) return err;
      console.log(result);
      return result;
    });
  });
}

我遇到的问题是函数返回undefined,但是,它管理console.log正确的结果。

2 个答案:

答案 0 :(得分:3)

由于您的函数是异步的,因此可以将其转换为promise。

public class MyModel {   
    .....

    @JsonInclude(JsonInclude.Include.NON_NULL)
    private String myProperty;

    .....
}

你可以这样使用它。

export const parse = (body) => {

return new Promise((resolve, reject) => {

  const parser = new xml2js.Parser({explicitArray: false, trim: true});
  parser.parseString(body, (err, result) => {
    if (err) return reject(err);
    parser.parseString(result['soapenv:Envelope']['soapenv:Body']['ns1:searchResponse'].searchReturn._, (err, result) => {
      if (err) return reject(err);
      resolve(result);
    });
  });
  }


})

答案 1 :(得分:2)

解析器是异步的,因此您需要使用回调或承诺来解释它。

const parser = new xml2js.Parser({explicitArray: false, trim: true});

export const parse = (body) => new Promise((resolve, reject) => {

  parser.parseString(body, (err, result) => {
    if(err) return reject(err);

    return resolve(result);    
  });
});

使用。

module.parse(xml).then((parsedResult) => {

});