import { XMLParser, XMLBuilder, XMLValidator } from "fast-xml-parser"; const input = ` MD11_OVHD_FLTCTL_UYDA_BT 10 (L:MD11_OVHD_FLTCTL_UYDA_BT, enum) 10 * 100 HAND LEFTSINGLE+LEFTRELEASE (M:Event) 'LeftSingle' scmp 0 == if{ 90390 (>L:CEVENT) } (M:Event) 'LeftRelease' scmp 0 == if{ 90391 (>L:CEVENT) } MD11_OVHD_FLTCTL_UYDB_BT 10 (L:MD11_OVHD_FLTCTL_UYDB_BT, enum) 10 * 100 HAND LEFTSINGLE+LEFTRELEASE (M:Event) 'LeftSingle' scmp 0 == if{ 90392 (>L:CEVENT) } (M:Event) 'LeftRelease' scmp 0 == if{ 90393 (>L:CEVENT) } MD11_OVHD_FLTCTL_LYDA_BT 10 (L:MD11_OVHD_FLTCTL_LYDA_BT, enum) 10 * 100 HAND LEFTSINGLE+LEFTRELEASE (M:Event) 'LeftSingle' scmp 0 == if{ 90394 (>L:CEVENT) } (M:Event) 'LeftRelease' scmp 0 == if{ 90395 (>L:CEVENT) } MD11_OVHD_FLTCTL_LYDB_BT 10 (L:MD11_OVHD_FLTCTL_LYDB_BT, enum) 10 * 100 HAND LEFTSINGLE+LEFTRELEASE (M:Event) 'LeftSingle' scmp 0 == if{ 90396 (>L:CEVENT) } (M:Event) 'LeftRelease' scmp 0 == if{ 90397 (>L:CEVENT) } MD11_OVHD_FLTCTL_LLO_BT 10 (L:MD11_OVHD_FLTCTL_LLO_BT, enum) 10 * 100 HAND LEFTSINGLE+LEFTRELEASE (M:Event) 'LeftSingle' scmp 0 == if{ 90398 (>L:CEVENT) } (M:Event) 'LeftRelease' scmp 0 == if{ 90399 (>L:CEVENT) } MD11_OVHD_FLTCTL_LLI_BT 10 (L:MD11_OVHD_FLTCTL_LLI_BT, enum) 10 * 100 HAND LEFTSINGLE+LEFTRELEASE (M:Event) 'LeftSingle' scmp 0 == if{ 90400 (>L:CEVENT) } (M:Event) 'LeftRelease' scmp 0 == if{ 90401 (>L:CEVENT) } MD11_OVHD_FLTCTL_RLI_BT 10 (L:MD11_OVHD_FLTCTL_RLI_BT, enum) 10 * 100 HAND LEFTSINGLE+LEFTRELEASE (M:Event) 'LeftSingle' scmp 0 == if{ 90402 (>L:CEVENT) } (M:Event) 'LeftRelease' scmp 0 == if{ 90403 (>L:CEVENT) } MD11_OVHD_FLTCTL_RLO_BT 10 (L:MD11_OVHD_FLTCTL_RLO_BT, enum) 10 * 100 HAND LEFTSINGLE+LEFTRELEASE (M:Event) 'LeftSingle' scmp 0 == if{ 90404 (>L:CEVENT) } (M:Event) 'LeftRelease' scmp 0 == if{ 90405 (>L:CEVENT) } `; const parser = new XMLParser({ ignoreAttributes: false, }); let jObj = parser.parse(input); const output = []; jObj.PartInfo.forEach((element) => { const codes = [ ...element.MouseRect.CallbackCode.matchAll(/([\d]*)[\s]*\(>L:CEVENT\)/gm), ].map((m) => m[1]); const obj = { "@_Name": "MD11_Button", NODE_NAME: element.Name, CODE_PRESS: `${codes[0]} (>L:CEVENT)`, CODE_RELEASE: `${codes[1]} (>L:CEVENT)`, }; output.push(obj); }); const builder = new XMLBuilder({ ignoreAttributes: false, arrayNodeName: "UseTemplate", format: true, }); const xmlContent = builder.build(output); console.log(xmlContent);