Du brauchst keine Größenangabe, da du durch die
XML Struktur immer feststellen kann, wann diese wieder vollständig (geschlossen ist). Dein grundlegendes Problem ist einfach nur, dass du mehrfach aufgerufen wirst, bis alle Daten empfangen wurden (bzw. du mehrfach Datan abholen musst). Dabei können die Daten an beliebiger Stelle getrennt werden. Von daher folgende Vorgehensweise:
1. Ein Buffer anlegen - am besten dynamisch. Es eignet sich z.B. ein TMemoryStream.
2. Alle abgeholten Datenpackete in diesen Stream schreiben (immer hinten dran)
3. Wenn du mal wieder was in den MemoryStream geschrieben hast, dann kannst du die Daten verarbeiten. Dazu musst du wissen, ob die Daten vollständig sind - und das kann dir dein
XML Provider sagen. Der weiss genau, ob die
XML Struktur vollständig ist (sprich: gibt es zum Hauptknoten-Tag auch ein schliessendes Tag). Wenn dies der Fall ist, weiss er auch wo die Daten eines
XML Packetes aufhören. Damit kannst du diesen Teil vorne aus dem MemoryStream entfernen. Dieses so lange wiederholen bis der MemoryStream eine Grösse von 0 hat (Idealfall, alles interpretierbar, da alles vollständig) oder der
XML Provider sagt, dass ist noch nicht vollständig.
So sollte der grundlegende Weg sein. Nun ist offen wie du deinen
XML Provider entlocken kannst, wie gross die Daten sind und bis wo in dem Stream eine komplette, gültige Struktur geht und ob sie gültig (komplett) ist.
Die String selber parsen um das Ende zu ermitteln (ob es enthalten ist) wäre ein möglicher Schnellschluss. Wenn der Hauptknoten immer gleich heisst, dann kannst du fest nach dem Ende-Tag des Knotens im String suchen, selber aufteilen und aus dem Stream löschen und entsprechend auch einen schon fertig aufbereiteten Stream deinem
XML Provider geben.