【发布时间】:2023-03-16 00:12:01
【问题描述】:
我正在开发适用于 Windows Phone 7 的应用程序。
我有一个使用 c# silverlight 中的 tcp 套接字解析 xml 流。我正在尝试使用 xmlreader 和内存流,但它没有帮助。当内存流被接收异步调用更新时,xmlreader 对该读取器没有影响。
请帮助我了解如何解析来自套接字的流式 xml。
我有一个这样的 xmlReader:
memoryStream= new MemoryStream();
_xmlreader = XmlReader.Create(memoryStream, xmlReaderSettings, context);
现在 memoryStream 更新为:
byte []buffer = "initialized with some xml bytes such as <node1> data </node1>"
因为这个缓冲区由 xml 的套接字接收异步操作填充。 现在我需要更新我的数据。所以我这样做...
memoryStream = memoryStream.write(buffer,0,buffer.length);
现在当我这样做时 _reader.read 失败。我不知道为什么会这样。否则是否有像我们在android os中用于xml解析的xmlpullparser(sax)一样的东西
while (_reader.Read())
{
switch (_reader.NodeType)
{
case XmlNodeType.Element:
{
node = new XElement(_reader.Name);
xmlBuildStack.Push(node);
}
break;
case XmlNodeType.EndElement:
.....
当我正在处理使用 xmpp xml 节的聊天应用程序时,是否有任何其他方法可以解析来自 tcp 套接字流的 xml。请帮我解决这个问题。
【问题讨论】:
-
嗨 Rakesh,你能试着澄清你的问题吗?您是否已经有一些代码可以分享,以显示您正在尝试做什么?这将使提供建议更容易。
-
尝试:先填充MemoryStream,再创建XmlReader。同时设置 stream.Position = 0;切换读/写时
-
我的流是一个 xml,它以碎片形式出现,即来自套接字的数据包。所以我需要用我收到的内容填充我的流。如果我先填充内存流然后创建 xmlreader。它不会完全填充目的。在第一次 receiveAsync 我得到一半的 xml 内容,在下一个 receiveAsyncs 我得到我的 xml需要附加到流中以使其成为正确的 xml 节的内容。如果这不是正确的方法,那我该怎么做。
-
不能每次收到新缓冲区时都创建一个新的 MemoryStream 和 XmlReader 吗?
-
@KooKiz 实际上是 xml 内容来自 tcp 套接字。通过套接字到达的内容可能不是正确的 xml 内容,即 xml 可以在 2-3 次接收异步调用中到达。
标签: c# xml sockets windows-phone-7 xmpp