Hi Colin!
Nice to see you back
Here is what I did also in your idea... but not working better !
[{"id":"e1fe9f07.bf544","type":"tab","label":"Flow 2","disabled":false,"info":""},{"id":"583fc13d.de8e3","type":"template","z":"e1fe9f07.bf544","name":"","field":"payload","fieldType":"msg","format":"text","syntax":"plain","template":"<LocationRQ xmlns=\"http://skyhookwireless.com/wps/2005\"\n version=\"2.26\"\n street-address-lookup=\"full\">\n<authentication version=\"2.2\">\n<key key=\"KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK\"\n\t username=\"ABABABABABABABABABABBBA\"/>\n</authentication>\n <gps-location>\n \n </gps-location>\n <gsm-tower>\n\n </gsm-tower>\n</LocationRQ>","output":"str","x":378.6999740600586,"y":211.00000095367432,"wires":[["89e48660.c124c8","15378136.073abf"]]},{"id":"89e48660.c124c8","type":"xml","z":"e1fe9f07.bf544","name":"","property":"payload","attr":"","chr":"","x":369.69998931884766,"y":254.99999713897705,"wires":[["5cdb24a0.06d03c"]]},{"id":"65d79b0.064ef64","type":"debug","z":"e1fe9f07.bf544","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":180,"y":261.8000011444092,"wires":[]},{"id":"15378136.073abf","type":"debug","z":"e1fe9f07.bf544","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":579.0000114440918,"y":211.79999446868896,"wires":[]},{"id":"5cdb24a0.06d03c","type":"debug","z":"e1fe9f07.bf544","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":577.0000114440918,"y":254.79999446868896,"wires":[]},{"id":"8d839b89.50b1e8","type":"function","z":"e1fe9f07.bf544","name":"AP01 split flag A/V","func":"// flag = A\n//IWAP01080524A2232.9806N11404.9355E000.1061830323.8706000908000102,460,0,9520,3671#\n// flag = V\n//IWAP01080524V0000.0000N00000.0000E000.1061830323.8706000908000102,460,0,9520,3671,Home|74-DE-2B-44-88-8C|97&Home1|74-DE-2B-44-88-8C|97&Home2|74-DE-2B-44-88-8C|97&Home3|74-DE-2B-44-88-8C|97# \nlet answer = {}\nlet elements = msg.payload.replace('#','').split(\",\") // this gives an array containing the bits\n// elements[0] is the long string starting IWAP01\nanswer.command = elements[0].substr(0,6)\nlet dateStr = elements[0].substr(6,6) // eg \"190215\" 15th Feb 2019\nanswer.date = new Date(Number(dateStr.substr(0,2))+2000, Number(dateStr.substr(2,2))-1, dateStr.substr(4,2)) // 080524 - date\nanswer.flag = (elements[0].substr(12,1)) // true or false - A or V\n// Get GPS datas\nlet c;\nanswer[\"gps-location\"] = [{}]\n if (answer.flag === \"A\") {\n let degreesN = Number(elements[0].substr(13,2))\n let minutesN = Number(elements[0].substr(15,7))\n let ns = elements[0].substr(22,1) // N or S\n let degreesE = Number(elements[0].substr(23,3))\n let minutesE = Number(elements[0].substr(26,7))\n let ew = elements[0].substr(33,1) // E or W\n answer[\"gps-location\"][0].latitude = degreesN + minutesN/60 // 2232.9806N\n if (ns === \"S\") answer.latitude = -answer.latitude\n answer[\"gps-location\"][0].longitude = degreesE + minutesE/60\n if (ew === \"W\") answer.longitude = -answer.longitude //11404.9355E\n}\n answer[\"gps-location\"][0].speed = elements[0].substr(34,5) // 000.1\n answer[\"gps-location\"][0].bearing = elements[0].substr(45,6) // 323.87\n answer[\"gps-location\"][0].constellation = {}\n answer[\"gps-location\"][0].constellation.nsat = elements[0].substr(54,3) \n\n// Get LBS datas\nlet e;\nanswer[\"gsm-tower\"] = [{}];\n answer[\"gsm-tower\"][0].mcc = elements[1] // 460\n answer[\"gsm-tower\"][0].mnc = elements[2] // 0\n answer[\"gsm-tower\"][0].lac = elements[3] // 9520 \n answer[\"gsm-tower\"][0].ci = elements[4] // 3671\n\nanswer.signalStrength = elements[0].substr(51,3) // 060\nanswer.batteryLevel = elements[0].substr(57,3) // 080\n\n// Get WIFI datas when flag = V\nlet i;\nanswer[\"access-point\"] = [];\n if (answer.flag === \"V\") {\n let wifiAccessPointsStrings = elements[5].split(\"&\")\n let j;\n for (j = 0; j < wifiAccessPointsStrings.length; j++) {\n let baseElements = wifiAccessPointsStrings[j].split(\"|\")\n answer[\"access-point\"].push({ ssid: baseElements[0], mac: baseElements[1], [\"signal-strength\"]: baseElements[2] }) // Home|74-DE-2B-44-88-8C|97&Home1|74-DE-2B-44-88-8C|97&Home2|74-DE-2B-44-88-8C|97&Home3|74-DE-2B-44-88-8C|97\n }\n // adjust baseCountwifiAccessPoints just in case the number actually there didn't match that expexted\n answer.baseCountwifiAccessPoints = answer[\"access-point\"].length\n}\n\nmsg.payload = answer\nreturn msg","outputs":1,"noerr":0,"x":183.69994735717773,"y":163,"wires":[["8100db3.89a4428"]]},{"id":"8100db3.89a4428","type":"switch","z":"e1fe9f07.bf544","name":"Route A/V","property":"payload.flag","propertyType":"msg","rules":[{"t":"eq","v":"A","vt":"str"},{"t":"eq","v":"V","vt":"str"}],"checkall":"true","repair":true,"outputs":2,"x":191.6999740600586,"y":215.19997787475586,"wires":[["66ad29c7.174d38","65d79b0.064ef64"],[]]},{"id":"66ad29c7.174d38","type":"function","z":"e1fe9f07.bf544","name":"MLS LBS+WIFI","func":"// Get positions from wifiAccessPoints\n\nvar data =\n{\n [\"gps-location\"] : msg.payload[\"gps-location\"],\n \n [\"gsm-tower\"] : msg.payload[\"gsm-tower\"],\n}\nvar msg = {\n \"headers\" : {\n \"Content-Type\": \"application/json\",\n },\n};\nreturn msg;\n","outputs":1,"noerr":0,"x":387.6999740600586,"y":155.00000095367432,"wires":[["583fc13d.de8e3","11f91fd7.7db3f"]]},{"id":"9c139de5.c10a","type":"inject","z":"e1fe9f07.bf544","name":"Valid IWAP01","topic":"","payload":"IWAP01190215A2232.9806N11404.9355E000.1061830323.8706000908000102,226,10,1440,22327#","payloadType":"str","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":96.69994354248047,"y":67.00000190734863,"wires":[["8d839b89.50b1e8"]]},{"id":"11f91fd7.7db3f","type":"debug","z":"e1fe9f07.bf544","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","x":604.9999542236328,"y":154.20000076293945,"wires":[]}]