快速xml解析只返回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 */}]
}

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

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

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

最新更新