If you're looking for a text-based alternative to XML, I'd recommend CSV. The
module handles proper quoting so you don't have to worry about weird characters in your data messing up your flat file's structure. This also gives you one-record-per-line, which would allow "stream-based parsing" like you were looking for.
and see if that works out first. Looks like a great fit for your application to me.