2014-09-02 87 views
1

我正在通过http响应流接收xml的“块”。每个数据块是一个完整的微型XML层次结构,如:如何通过HTTP读取XElement连续的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,调用处理它的方法,然后等待下一个块。

+0

读块成'StringBuilder'或部分名单是不够的? – Mrchief 2014-09-02 19:42:14

+0

我需要知道什么时候停止阅读(即,何时达到了关闭的根元素)? – Jimmy 2014-09-02 19:57:40

+0

哦,我明白了。因此,响应块可能包含下一个或前一个块的部分块?如果没有(即块总是单个节点),那么事情就容易一些。 – Mrchief 2014-09-02 20:01:54

回答

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); 
    } 
}