【问题标题】:How to read into an XElement a continuous stream of XML over HTTP如何通过 HTTP 将连续的 XML 流读入 XElement
【发布时间】:2014-09-04 01:45:01
【问题描述】:

我正在通过 http 响应流接收 xml 的“块”。每个 chunk 都是一个完整的 mini xml 层次结构,例如:

<chunk1>
  <id>1</id>
  <data>blah blah-blah</data>
</chunk1>
...
(30 seconds later)
...
<chunk2>
  <id>2</id>
  <data>blah blah-blah</data>
</chunk2>
...
(30 seconds later)
...
<chunk1>
  <id>3</id>
  <data>blah blah-blah</data>
</chunk1>

c# 中将每个“块”读入 XElement 以进行进一步处理的最佳方法是什么?每个块可能有不同的根元素。

我看到了对similar questions 的回复。但是,响应似乎不是最佳的,因为它们涉及处理每个节点。我只想读取流,直到到达与打开块节点相对应的关闭节点,将整个块馈入 XElement,调用方法对其进行处理,然后等待下一个块。

【问题讨论】:

  • 将块读入StringBuilder 或某些列表还不够?
  • 我需要知道何时停止阅读(即何时到达结束根元素)?
  • 哦,我现在明白了。那么响应块可能包含下一个或前一个块的部分块吗?如果不是(即块始终是单个节点),那么事情会容易一些。
  • IOW,您是否期望每个块中有“...”或者它们可以是“rootX>...”或“...
  • 响应是一个(理论上)永不结束的流。

标签: c# xml http streaming


【解决方案1】:

这符合我的要求:

XmlReader reader = XmlReader.Create(stream, new XmlReaderSettings() { ConformanceLevel = ConformanceLevel.Fragment });

while (reader.Read())
{
  using (XmlReader subTreeReader = reader.ReadSubtree())
  {
    XElement xmlData = XElement.Load(subTreeReader);
    Process(xmlData);
  }
}

【讨论】:

    猜你喜欢
    • 2011-09-14
    • 2016-01-11
    • 2010-12-08
    • 1970-01-01
    • 2013-10-28
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    相关资源
    最近更新 更多