使用Typescript和xml2js解析XML

时间:2018-10-11 01:05:14

标签: xml typescript xml2js

我正在尝试使用Express并解析XML正文。我正在使用bodyparser来输入文本,但是无法获取xml2js将我的XML解析为可用格式。

import * as xml2js from 'xml2js';
try {
    const XML:string = '<Pan>0000000000000702203</Pan>';

    xml2js.parseString(XML, {trim: true}, function (err, result) {
        if(err) console.log(err);
        console.log(result); 
    });
} catch (e) {
    console.log(e);
}

两者都不起作用:

try {
    xml2js.parseString(XML, {trim: true}, (err, result) => {
        if(err) console.log(err);
        console.log(result); 
    });
} catch (e) {
    console.log(e);
}

在VSCode调试器中运行此代码时,代码立即跳过该函数,并且不处理xml2js.parseString()。错误和结果永远不会得到值。

我也使用Parser()类尝试了它:

const p:xml2js.Parser = new xml2js.Parser();
p.parseString(XML, (err:{}, result:{}) => {
    if(err) console.log(err);
    console.log(result); 
});

p.parseString(XML, function(err:{}, result:{}) {
    if(err) console.log(err);
    console.log(result); 
});

这做同样的事情,不会起作用或不会产生错误。

更新:2018/10/11:我已经尝试调试它,并且看来sax.parser正在工作并返回数据。我已完成以下操作:

console.log(xml2js.parseString(XML, (err, result) => {
    if (err) {
        console.log(err);
    }
});

并且我确实将VSCode中的SaxParser作为对象返回,可以查询并查看结果,但是我没有调用回调函数。

调试:

SAXParser {comment: "", sgmlDecl: "", textNode: "", tagName: "", doctype: "", …}

尽管xml2js.parseString应该不返回任何内容,因为该定义将其作为一个空值。

2 个答案:

答案 0 :(得分:0)

您可以尝试使用JSON.stringify(result)

答案 1 :(得分:0)

import xml2js from 'xml2js';

async parseXml(xmlString: string) {
    return await new Promise((resolve, reject) => xml2js.parseString(xmlString, (err, jsonData) => {
      if (err) {
        reject(err);
      }
      resolve(jsonData);
    }));

相关问题