Вопрос

Как мне записать результаты хранимой процедуры 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 был большой длинной строкой.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top