Scrittura di XML in memoria anziché su disco
Domanda
Come posso scrivere i risultati di una procedura memorizzata PER XML PERCORSO in memoria piuttosto che un file su disco?
Modo attuale di fare le cose:
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");
}
Invece di scrivere il file su disco su cui altri metodi quindi operano, voglio che questo metodo restituisca l'xml alla memoria.
Suppongo che questo sarebbe molto più veloce della scrittura su disco ....
Soluzione
Hai un XmlReader
- puoi fare tutto ogni genere di cose. Ad esempio
XmlDocument doc = new XmlDocument();
using(XmlReader xr = cmd_Org.ExecuteXmlReader()) {
doc.Load(xr);
}
// TODO: play with "doc" with xpath etc
Altri suggerimenti
DataSet.WriteXml
presenta molti sovraccarichi: puoi scrivere su uno stream (incluso un MemoryStream
) e uno scrittore (incluso un StringWriter
). Ciò presuppone che tu voglia davvero passare attraverso un DataSet
- se sei felice di ottenere l'XML direttamente senza usare un DataSet
, usa semplicemente i suggerimenti di Marc.
Puoi chiamare il sovraccarico di WriteXml
che scrive su uno stream e usare un MemoryStream
, anche se potresti voler dire che vuoi l'XML come una grande stringa lunga.