2014-09-02 40 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); 
    } 
}