带有SslStream的XmlTextReader – 从流中读取多个xml

我有一个SslStream,我从中收到自发的XML消息。 我想使用XmlTextReader处理来自该流的XML消息。 不幸的是,它允许我只读取第一个XML。 当我收到第一个xml后调用Read时,该方法抛出exception:XML文档中的多个根(“Xml_MultipleRoots”)。 我相信这是一个问题,流一个接一个地提供xml消息,但XmlTextReader只能处理一个。 如何解决这个问题?

首先,不要再使用new XmlTextReader()了。 使用XmlReader.Create() ,这是自.NET 2.0以来创建XmlReader的首选方法。

其次,使用接受XmlReaderSettings对象的Create的重载:

 using (var reader = XmlReader.Create(sslStream, new XmlReaderSettings { ConformanceLevel = ConformanceLevel.Fragment })) { // ... read xml } 

您应该为每条消息在流周围创建一个新的XmlReader。