Dada una instancia de XDocument, ¿cómo puedo obtener fácilmente un TextReader que represente esa instancia?¿Cómo puedo obtener fácilmente un TextReader desde un XDocument?
El mejor que he podido llegar a algo como esto (donde xml
es una instancia XDocument):
var s = new MemoryStream();
var sw = new StreamWriter(s);
xml.Save(sw);
sw.Flush();
s.Position = 0;
TextReader tr = new StreamReader(s);
Sin embargo, esto parece un poco torpe, así que me preguntaba si hay una manera más fácil?
Editar
El ejemplo anterior es equivalente a la conversión de toda la instancia a una cadena XML y luego crear un TextReader sobre esa cadena.
Me preguntaba si hay una forma más fluida de hacerlo que leer todo el contenido en la memoria.
Marca: me acabo de ocurrir que a veces uso un "inversor de flujo continuo" para los casos en que un API quiere escribir en un flujo y necesito leer de él (es decir, para un resultado de acción). Esto podría adaptarse para hacer un "inversor de escritor de texto", que esencialmente le daría acceso real a través de 'XDocument.Save', pero la desventaja es que requiere un hilo adicional para ejecutarse. ¿Eso lo ayudaría aquí? – Aaronaught
@Aaronaught: Gracias, pero eso es probablemente demasiado para pensarlo. Principalmente hice la pregunta por curiosidad. En mi edición actual, espero analizar un pequeño fragmento de XML al inicio de la aplicación, así que definitivamente puedo vivir cargando todo el documento a la vez. –
De acuerdo, pensé que estabas tratando de enviarlo a través de una red o algo por el estilo. Tengo curiosidad por saber por qué necesitas hacer esto, ¿estás usando una API XML que solo puede aceptar un 'TextReader'? – Aaronaught