Probablemente haya otra forma mejor de hacer el reemplazo, pero me vi apurado ayer y lo hice así en plan rápido porque si no no dormía
Creo que hay un error aquí:
MyXML.XML.Text := stringreplace(MyXML.XML.Text,'</IDDestinatario></item>','</IDDestinatario></Destinatarios>',[rfReplaceAll]);
Debería ser así. me equivoqué al copiar/pegar:
MyXML.XML.Text := stringreplace(MyXML.XML.Text,'</item></Destinatarios>','</IDDestinatario></Destinatarios>',[rfReplaceAll]);
Esto solo funciona si el XML generado antes de llamar a FormatXMLData contiene todo el XML en una sola línea, porque es la única forma de que se encuentre esa cadena exacta a reemplazar.
Si ya estuviera formateado, con cada nodo en una línea del archivo, el reemplazo no funciona (no existe esa cadena seguida tal cual), y habría que usar la función comentada anteriormente, que está más currada.
Ojo, yo he detectado lo de <item> solo en estos dos nodos, pero puede que ocurra también en otros y habrá que estar atentos.