Escribir XML en memoria en lugar de disco
Pregunta
¿Qué debo hacer para escribir en la memoria los resultados de un procedimiento almacenado FOR XML PATH en lugar de un archivo en el disco?
Forma actual de hacer las cosas:
private void GetChartData(string OC_Ttl1, string OC_Ttl2, string OC_OL31)
{
OC_Ttl_1 = OC_Ttl1;
OC_Ttl_2 = OC_Ttl2;
OC_OL3_1 = OC_OL31;
//Output xml
DataSet orgDataSet = new DataSet();
orgDataSet.ReadXml(cmd_Org.ExecuteXmlReader(), XmlReadMode.Auto);
orgDataSet.WriteXml("InputXMLFiles/" + OC_OL3_1.Replace(" ",
"_").Replace("/", "-") + ".xml");
}
En lugar de escribir el archivo en el disco en el que operan otros métodos, quiero que este método devuelva el xml a memeory.
Supongo que esto sería mucho más rápido que escribir en el disco ...
Solución
Tienes un XmlReader
- puedes hacer todas todo tipo de cosas. Por ejemplo
XmlDocument doc = new XmlDocument();
using(XmlReader xr = cmd_Org.ExecuteXmlReader()) {
doc.Load(xr);
}
// TODO: play with "doc" with xpath etc
Otros consejos
DataSet.WriteXml
tiene muchas sobrecargas: puedes escribir en una secuencia (incluido un MemoryStream
) y un escritor (incluido un StringWriter
). Eso supone que realmente desea ir a través de un DataSet
: si está contento de obtener el XML directamente sin usar un DataSet
, simplemente use las sugerencias de Marc.
Puede llamar a la sobrecarga de WriteXml
que se escribe en una transmisión, y usar un MemoryStream
, aunque puede querer decir que desea el XML como una cadena larga y grande.