Sorry, my bad. I should have been more explicit. Try
TReadBufStream. TBufStream is the ancestor class.
Buffer : TReadBufStream; // Buffer declaration
Buffer := TReadBufStream.Create(SSTDIN, 10); // 10 bytes buffer
xmlsrc := TXMLInputSource.Create(Buffer);
But... that won't probably help you out either as it only solves the part that the 'reader' isn't thrown off when no output is generated (or takes a long time).
You would not be able to distinguish between two files because afaik the only way to do that would be to close the output en re-open it again (on the program that feeds the pipe/reader, and yes that seems to work), but closing the output would be your only way of being able to tell that the process ended. Unfortunately the parser also does not react to any control characters or provides any other means to stop parsing after last closing tag so it will happily parse along and detect the second xml tag (and throw an exception because of that).
afaik that leaves one other option open, but it will be slow. Read the buffer into a temporary stream and analyze the contents to be able to distinguish between different files and create a new parser (after having destroyed the old one) when a new files has 'arrived' and feed the new parser this buffer.