Как я могу легко получить TextReader из XDocument? - PullRequest
5 голосов
/ 09 апреля 2010

Учитывая экземпляр 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 поверх этой строки.

Мне было просто интересно, есть ли более потоковый способ сделать это, чем считывать все содержимое в память.

Ответы [ 2 ]

4 голосов
/ 09 апреля 2010
  TextReader tr = new StringReader(xml.ToString());

Доброжелательность,

Dan

0 голосов
/ 09 апреля 2010

Я не пробовал, но есть метод XNode.WriteTo(XmlWriter). Вы можете передать его XmlTextWriter, чтобы получить текстовое представление. Это, вероятно, займет немного больше кода чтобы написать, но он должен быть более "потоковым", как вы и просили: -)

[Редактировать:] Еще проще: есть метод XNode.CreateReader(), который дает вам XmlReader. Вам просто нужно самостоятельно обработать преобразование в текст.

...