2010-04-09 49 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