使用 Typescript 和 xml2js 解析 XML

Ste*_*ott 5 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);
}
Run Code Online (Sandbox Code Playgroud)

要么不起作用:

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

在 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); 
});
Run Code Online (Sandbox Code Playgroud)

这做同样的事情并且不起作用或填充错误,结果。

更新:2018 年 10 月 11 日:我试过调试这个,看起来 sax.parser 正在工作并返回数据。我做了以下工作:

console.log(xml2js.parseString(XML, (err, result) => {
    if (err) {
        console.log(err);
    }
});
Run Code Online (Sandbox Code Playgroud)

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

调试:

SAXParser {comment: "", sgmlDecl: "", textNode: "", tagName: "", doctype: "", …}
Run Code Online (Sandbox Code Playgroud)

虽然 xml2js.parseString 应该不返回任何内容,因为定义将其作为空值。

Use*_*ser 0

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