【问题标题】:Parsing XML with Typescript and xml2js使用 Typescript 和 xml2js 解析 XML
【发布时间】:2019-03-15 23:38:25
【问题描述】:

我正在尝试使用 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()。 err 和 result 永远不会得到值。

我也尝试过使用 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);
    }
});

我确实得到了 SaxParser 作为 VSCode 中的一个对象返回,我可以在其中查询并查看我的结果,但我没有调用我的回调函数。

调试:

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

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

【问题讨论】:

  • 您使用的是哪个版本的 xml2js。您的示例代码在这里可以正常工作。输出:{潘:'0000000000000702203'}
  • 您在哪里找到 xml2js 的声明文件?
  • @softbear 我的版本是 0.4.19。我无法进入 Visual Studio 代码中的函数来调试它。让我再试一次,只用 Postman 测试它。哪个版本的代码有效?
  • @DerekMahar 我只是使用 npm 安装了@types/xml2js
  • @DerekMahar 是的。通过类型定义和正确的编码,它确实有效。我还发现了一个 fast-xml-parser 也可以很好地与 typescript 配合使用。

标签: xml typescript xml2js


【解决方案1】:

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);
    }));

【讨论】:

    【解决方案2】:

    你可以试试JSON.stringify(result)。

    【讨论】:

      猜你喜欢
      • 2014-08-30
      • 2012-06-09
      • 1970-01-01
      • 2018-10-31
      • 2019-10-24
      • 1970-01-01
      • 2015-04-25
      • 2017-09-04
      • 1970-01-01
      相关资源
      最近更新 更多