Écrire du XML en mémoire au lieu du disque
Question
Comment puis-je écrire les résultats d'une procédure stockée FOR XML PATH en mémoire plutôt que dans un fichier sur disque?
Façon actuelle de faire les choses:
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");
}
Au lieu d'écrire le fichier sur le disque que d'autres méthodes utilisent, je souhaite que cette méthode renvoie le code XML à la mémoire.
Je suppose que ce serait beaucoup plus rapide que d'écrire sur le disque ....
La solution
Vous avez un XmlReader
- vous pouvez faire tout toutes sortes de choses. Par exemple
XmlDocument doc = new XmlDocument();
using(XmlReader xr = cmd_Org.ExecuteXmlReader()) {
doc.Load(xr);
}
// TODO: play with "doc" with xpath etc
Autres conseils
DataSet.WriteXml
présente de nombreuses surcharges: vous pouvez écrire dans un flux (y compris un MemoryStream
) et un graveur (y compris un StringWriter
). En supposant que vous souhaitiez vraiment utiliser un DataSet
- si vous voulez obtenir le code XML directement sans utiliser un DataSet
, utilisez simplement les suggestions de Marc.
Vous pouvez appeler la surcharge de WriteXml
qui écrit dans un flux et utiliser un MemoryStream
, bien que vous souhaitiez peut-être vouloir que le code XML soit une chaîne longue et longue.