fast-xml-parse returns 只有一个对象而不是 Nodejs 中的数组

fast-xml-parse returns only one of object instead of array in Nodejs

我正在使用某些服务执行跟踪功能。它以 XML 格式提供响应。为了解析 XML 响应,我决定使用 fast-xml-parser 包。 但是有一个问题:

当我只收到一项回复时,效果很好,但如果我有多个回复:

<xsd:events xmlns:xsd="http://somelink/xsd">
        <event id=“1234”>
          <packetCode>ABC123</packetCode>
          <eventCode>EVENT_CODE</eventCode>
          <eventDate>2020-12-03T14:34:09.000+02:00</eventDate>
          <stateCode>STATUS_CODE</stateCode>
          <eventSource zip=“123">Some place</eventSource>
        </event>
        <event id=“456”>
          <packetCode>DEF456</packetCode>
          <eventCode>EVENT_CODE</eventCode>
          <eventDate>2020-12-03T14:40:44.000+02:00</eventDate>
          <stateCode>STATUS_CODE</stateCode>
          <eventSource zip=“123">Some place</eventSource>
        </event>
      </xsd:events>

之后

const xmlParser = require('fast-xml-parser');
xmlParser.parse(exampleXml);

我得到的对象只有最后一个元素:

{
    'xsd:events': {
      event: {
        packetCode: 'DEF456',
        eventCode: 'EVENT_CODE',
        eventDate: '2020-12-03T14:40:44.000+02:00',
        stateCode: 'STATUS_CODE',
        eventSource: 'Some place',
      }
    }
  }

但我希望得到两个事件的数组。最好让它看起来像:

{
    'xsd:events': [{/* event data */}, {{/* event data */}]
  }

我做错了什么,也许需要一些选项或其他东西?寻求帮助和建议。

问题是属性有弯引号 而不是 "

这通常是 copy/paste 来自 Word 和 MS Office 产品的结果,这些产品有时会将常规引号更改为定向卷曲的“智能引号”。这些与常规引号不同,通常会导致解析问题,因为它们是多字节字符,如果编码不当,将被损坏并作为两个单独的字符读取。

修复 XML 以使用正则引号:

<xsd:events xmlns:xsd="http://somelink/xsd">
    <event id=“1234”>
      <packetCode>ABC123</packetCode>
      <eventCode>EVENT_CODE</eventCode>
      <eventDate>2020-12-03T14:34:09.000+02:00</eventDate>
      <stateCode>STATUS_CODE</stateCode>
      <eventSource zip="123">Some place</eventSource>
    </event>
    <event id=“456”>
      <packetCode>DEF456</packetCode>
      <eventCode>EVENT_CODE</eventCode>
      <eventDate>2020-12-03T14:40:44.000+02:00</eventDate>
      <stateCode>STATUS_CODE</stateCode>
      <eventSource zip="123">Some place</eventSource>
    </event>
  </xsd:events>

并且它将生成预期的 JSON,其中包含两个事件对象的数组:

{
    "xsd:events": {
        "event": [
            {
                "packetCode": "ABC123",
                "eventCode": "EVENT_CODE",
                "eventDate": "2020-12-03T14:34:09.000+02:00",
                "stateCode": "STATUS_CODE",
                "eventSource": "Some place"
            },
            {
                "packetCode": "DEF456",
                "eventCode": "EVENT_CODE",
                "eventDate": "2020-12-03T14:40:44.000+02:00",
                "stateCode": "STATUS_CODE",
                "eventSource": "Some place"
            }
        ]
    }
}