2010-04-09 46 views
5

給定一個XDocument實例,我該如何輕鬆獲取表示該實例的TextReader?如何從XDocument輕鬆獲取TextReader?

我已經能夠拿出的是這樣的(其中xml是一個XDocument實例)最好的:

var s = new MemoryStream(); 
var sw = new StreamWriter(s); 

xml.Save(sw); 

sw.Flush(); 
s.Position = 0; 

TextReader tr = new StreamReader(s); 

然而,這似乎有點麻煩,所以我在想,如果有一個更簡單的方法


編輯

上面的例子是相當於整個實例轉換爲XML串,然後創建在該字符串的TextReader。

我只是想知道是否有更像流的方式來做到這一點,而不是將整個內容讀入內存。

+0

馬克 - 我想到我有時候會在某些API想要寫入流的情況下使用「流逆變器」,我需要從它讀取(即對於ActionResult)。這可以用來製作一個「文本寫入器反相器」,它基本上可以通過'XDocument.Save'給你真正的流式訪問,但缺點是它需要一個額外的線程來運行。這會幫助你嗎? – Aaronaught 2010-04-09 17:23:30

+0

@Aaronaught:謝謝,但這可能太多了。出於好奇,我主要問這個問題。在我目前的問題中,我希望在應用程序啓動時解析一小段XML,所以我可以一勞永逸地加載整個文檔。 – 2010-04-09 17:26:50

+0

Alrighty,我想你是試圖通過網絡發送它或是發生這種情況。我很好奇爲什麼你需要這樣做,你是否使用只能接受「TextReader」的XML API? – Aaronaught 2010-04-10 00:22:39

回答

3
TextReader tr = new StringReader(xml.ToString()); 

善良,

+0

那麼,這絕對比我原來的方法更好,但仍然不是我正在尋找的東西(請參閱我編輯的問題)。然而,+1給我一個單行的替代:) – 2010-04-09 14:46:26

+0

我可能會補充說調用'TextReader'應該用''using'包裝,因爲它實現了'IDisposable'。 – 2016-05-27 11:26:06

0

我還沒有嘗試過,但有一個方法XNode.WriteTo(XmlWriter)。你可以通過它XmlTextWriter得到一個文字表示。這可能需要稍微更代碼 寫的,但它應該是更多的「流式」爲你:-)要求

[編輯:]即使簡單:這裏面有給你一個XmlReader的方法XNode.CreateReader()。你只需要處理轉換爲文本自己。

+0

是的,但這就是蹭。除非我錯過了一些東西,否則從XmlReader到TextReader沒有簡單的轉換。 – 2010-04-09 17:28:11