Запись XML в память вместо диска
Вопрос
Как мне записать результаты хранимой процедуры FOR XML PATH в память, а не в файл на диске?
Текущий способ ведения дел:
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");
}
Вместо записи файла на диск, с которым затем работают другие методы, я хочу, чтобы этот метод возвращал XML в память.
Я предполагаю, что это будет намного быстрее, чем запись на диск ....
Решение
У вас есть XmlReader
- вы можете делать все разные вещи. Например,
XmlDocument doc = new XmlDocument();
using(XmlReader xr = cmd_Org.ExecuteXmlReader()) {
doc.Load(xr);
}
// TODO: play with "doc" with xpath etc
Другие советы
DataSet.WriteXml
имеет много перегрузок - вы можете записывать в поток (включая MemoryStream
) и записывающее устройство (включая StringWriter
). Это предполагает, что вы действительно хотите пройти через DataSet
- если вы счастливы получить XML напрямую, без использования DataSet
, тогда просто используйте предложения Марка.
Вы можете вызвать перегрузку WriteXml
, которая выполняет запись в поток, и использовать MemoryStream
, хотя вы можете иметь в виду, что вы хотите, чтобы XML был большой длинной строкой. р>