Data un'istanza XDocument, come posso ottenere facilmente un TextReader che rappresenta quell'istanza?Come posso ottenere facilmente un TextReader da un XDocument?
Il meglio che ho potuto venire in mente è qualcosa di simile (dove xml
è un'istanza XDocument):
var s = new MemoryStream();
var sw = new StreamWriter(s);
xml.Save(sw);
sw.Flush();
s.Position = 0;
TextReader tr = new StreamReader(s);
Tuttavia, questo sembra un po 'goffo, quindi mi chiedevo se c'è un modo più semplice?
Modifica
L'esempio precedente è equivalente a convertire l'intera istanza di una stringa XML e quindi creare un TextReader su tale stringa.
Mi stavo chiedendo se c'è un modo più simile a un flusso per farlo che leggere l'intero contenuto in memoria.
Mark: mi è appena venuto in mente che a volte utilizzo un "inverter di flusso" per i casi in cui alcune API desiderano scrivere su un flusso e ho bisogno di leggerlo (ad esempio per un ActionResult). Questo potrebbe essere adattato per creare un "text writer inverter", che essenzialmente ti darà un vero accesso in streaming tramite 'XDocument.Save', ma il lato negativo è che richiede un thread aggiuntivo per l'esecuzione. Ti aiuterebbe qui? – Aaronaught
@Aaronaught: Grazie, ma probabilmente è troppo per farcela. Ho principalmente chiesto la domanda per curiosità. Nel mio numero attuale, mi aspetto di analizzare un piccolo frammento di XML all'avvio dell'applicazione, quindi posso sicuramente vivere con il caricamento dell'intero documento in una sola volta. –
Alrighty, ho pensato che stavi cercando di inviarlo su una rete o qualcosa del genere. Sono curioso di sapere perché devi fare questo, stai usando un'API XML che può solo accettare un 'TextReader'? – Aaronaught