Given an XDocument instance, how can I easily get a TextReader that represents that instance?
The best I've been able to come up with is something like this (where x开发者_C百科ml
is an XDocument instance):
var s = new MemoryStream();
var sw = new StreamWriter(s);
xml.Save(sw);
sw.Flush();
s.Position = 0;
TextReader tr = new StreamReader(s);
However, this seems a little clunky, so I was wondering if there's an easier way?
Edit
The above example is equivalent to converting the entire instance to an XML string and then create a TextReader over that string.
I was just wondering whether there's a more stream-like way to do it than reading the entire contents into memory.
TextReader tr = new StringReader(xml.ToString());
I haven't tried it, but there is a Method XNode.WriteTo(XmlWriter)
. You could pass it a XmlTextWriter
to get a textual representation. This probably will take somewhat more code
to write, but it should be more "stream-like" as you requested :-)
[Edit:] Even easier: There's a method XNode.CreateReader()
which gives you an XmlReader
. You'll just have to handle the conversion to text yourself.
精彩评论