【发布时间】:2012-02-21 13:17:57
【问题描述】:
我正在用 C# .NET 4.0 编写网络服务器。有一个网络 TCP/IP 连接,我可以通过它接收完整的 XML 元素。他们定期到达,我需要立即处理。每个 XML 元素本身就是一个完整的 XML 文档,因此它有一个开始元素、几个子节点和一个结束元素。整个流没有单个根元素。所以当我打开连接时,我得到的是这样的:
<status>
<x>123</x>
<y>456</y>
</status>
一段时间后它继续:
<status>
<x>234</x>
<y>567</y>
</status>
等等。我需要一种方法来读取完整的 XML 字符串,直到状态元素完成。我不想用纯文本阅读方法来做到这一点,因为我不知道数据以什么格式到达。正如其他地方经常描述的那样,我绝对不能等到整个流完成。我尝试使用 XmlReader 类,但它的文档很奇怪,方法不起作用,第一个元素丢失,发送第二个元素后,发生 XmlException,因为有两个根元素。
【问题讨论】:
-
我怀疑 XmlReader 是要走的路,因为它需要一个根元素并且它不适合连续流式传输 XML 元素。通常在处理基于套接字的连接时,您会监听连接并寻找识别每个数据块的开始和结束。我知道您说过您不想这样做,但我希望您必须使用纯文本读取方法来至少识别出一块您可以解析的 XML。
-
您需要为每条消息实例化一个新的阅读器,其中消息是一个完整的节点。
标签: c# .net xml networking