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