【问题标题】:fast-xml-parse returns only one of object instead of array in Nodejsfast-xml-parse 在 Nodejs 中只返回一个对象而不是数组
【发布时间】:2021-03-16 14:12:54
【问题描述】:

我正在使用某些服务进行跟踪功能。它以 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 */}]
  }

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

【问题讨论】:

    标签: javascript xml xml-to-json fast-xml-parser


    【解决方案1】:

    问题是属性有花括号 而不是"

    这通常是从 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"
                }
            ]
        }
    }
    

    【讨论】:

    • 谢谢,我完全没提。真的节省了我很多时间
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-06
    • 1970-01-01
    • 2022-11-15
    • 2016-01-23
    • 1970-01-01
    • 2013-07-07
    • 2016-05-03
    相关资源
    最近更新 更多