fast-xml-parse возвращает только один объект вместо массива в Nodejs

Я выполняю функцию отслеживания с помощью какой-то службы. Он предоставляет ответ в формате XML. Для анализа ответа XML я решил использовать fast-xml-parserпакет. Но существует проблема:

Когда я получаю в ответ только один элемент, он работает хорошо, но если у меня их несколько, например:

<xsd:events xmlns:xsd="http://epevents.post.ee/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 */}]
  }

Что я делаю не так, возможно, нужны какие-то опции или что-то еще? Нужна помощь и советы.

1 ответ

Решение

Проблема в том, что атрибуты имеют фигурные кавычки. вместо ".

Это часто является результатом копирования / вставки из продуктов Word и MS Office, которые иногда меняют обычные кавычки на "умные кавычки", которые являются направленными фигурными. Это не то же самое, что обычные кавычки, и часто вызывают проблемы с синтаксическим анализом, поскольку они являются многобайтовыми символами и, если они не закодированы должным образом, будут искажены и прочитаны как два отдельных символа.

Исправьте XML, чтобы использовать обычные кавычки:

<xsd:events xmlns:xsd="http://epevents.post.ee/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"
            }
        ]
    }
}
Другие вопросы по тегам