Limitation of System.Xml’s Pull model parsing

Parsing XML on the fly has traditionally been done with SAX, where you register handlers with the parser for tags that you're interested in, and then let the parser run - the parser parses the document and as it sees those tags, it calls your handler. 
 
This is mainly designed for very large documents, where you don't want to load the whole document into memory - you just want to work on pieces of the document one at a time.  If you're parsing a 20 meg XML file to generate HTML, doing it with SAX means you wont' need anywhere near the amount of memory you'd need to load the entire document.
 
But the Jabber project (and maybe others, but that's the one that caught my attention) uses XML as a protocol.  Cool idea:  You rig up a SAX parser on a socket, register handlers for the various packet types you're interested in, and that's it - much of your protocol work is done.  The server just writes XML to a socket, and the handles the events as they fire.
 
The .NET framework uses a different model for parsing long XML documents - instead of the ?push? model, which is what the Framework SDK Docs calls SAX, it uses a ?pull? model, where the client explicitly pulls tags from the document and does things with them.
 
Whether you prefer push or pull is another story but there's a problem with the .NET framework 1.0 and 1.1's implementation of the XML reader:  It won't return a tag to you until it has the next token after the close of the current one.
 
For example, if the parser is reading from a stream and the data available in the stream at the moment is ?<hello>test</hello>? and there is no data after the close angle bracket (and it's not the end of the file), the parser will block. Until there's another token available (a whitespace, an open angle bracket, etc), it won't return the <hello> node.
 
This makes the whole parser usesless for implementing something like a Jabber client.
 
Bummer.  I've reported it as a bug, hope it gets fixed for the next version - meanwhile I guess I'll look into using COM interop with the MSXML parser and SAX.