【发布时间】:2011-06-23 13:41:29
【问题描述】:
给定一个通过 TCP 将 XML 流式传输给我的第三方系统。总传输的 XML 内容(不是流中的一条消息,而是串联的消息)如下所示:
<root>
<insert ....><remark>...</remark></insert>
<delete ....><remark>...</remark></delete>
<insert ....><remark>...</remark></insert>
....
<insert ....><remark>...</remark></insert>
</root>
上述示例的每一行都可以单独处理。由于这是一个流式处理,我不能等到一切都到了,我必须在内容到来时对其进行处理。问题是内容块可以按任意点切片,不尊重任何标签。 如果内容以这样的片段形式到达,您对如何处理内容有什么好的建议吗?
块 1:
<root>
<insert ....><rem
块 2:
ark>...</remark></insert>
<delete ....><remark>...</remark></delete>
<insert ....><remark>...</rema
块 N:
rk></insert>
....
<insert ....><remark>...</remark></insert>
</root>
编辑:
虽然处理速度不是问题(没有实时问题),但我不能等待整个消息。实际上最后一块永远不会到达。第三方系统在遇到变化时发送消息。这个过程永远不会结束,它是一个永不停止的流。
【问题讨论】:
-
你需要实时处理还是等到你得到完整的内容?换句话说,这个问题是关于以最优雅/最有效的方式处理 XML 片段或连接流中的数据吗?
-
我认为如果您可以使用阻塞读取,您可以使用
XmlReader类。不知道如何使用非阻塞 IO 来做到这一点。 -
听起来你需要使用一些字符串操作,这样当你收到一个块时,你取出可处理的部分,处理它们(如果可以的话,异步会很好)然后将下一个块附加到剩下的任何部分,然后像这样循环。
标签: .net xml streaming non-well-formed