2009-10-21 10 views
2

Comment écrire les résultats d'une procédure stockée FOR XML PATH en mémoire plutôt qu'un fichier sur disque?Ecriture XML en mémoire au lieu du 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 fonctionnent alors sur, je veux avoir cette méthode retourne le xml à memeory.

Je suppose que ce serait beaucoup plus rapide que l'écriture sur le disque ....

+0

(a répondu au commentaire) –

Répondre

4

Vous avez un XmlReader - vous pouvez faire 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 
+0

Merci Marc. Je ne suis pas sûr de savoir comment cela aide dans ma situation actuelle. Soyez gentil, je suis novice .Net – MrBliz

+0

Désolé pour le retard; J'étais dans le train. Un 'XmlReader' est essentiellement un" tuyau "au xml entrant. En chargeant ceci dans quelque chose comme 'XmlDocument', vous avez accès au modèle d'objet DOM complet et vous pouvez étudier le fichier XML. Si non - veuillez clarifier ce que vous voulez faire avec les données? –

+0

Merci Marc. Au moment où les données XML sont écrites sur le disque, puis une autre méthode est appelée qui effectue une XSLCompiledTransform sur les données pour le transformer d'un document XML plat en un document hiérarchique. Ces données sont ensuite écrites dans un fichier xml sur le disque. Une autre méthode est ensuite appelée pour faire une autre transformation Xsl qui sort le xml en html. Excuses pour le retard à revenir, anniversaire de copines hier. – MrBliz

1

DataSet.WriteXml a beaucoup de Surcharges électriques - vous pouvez écrire à un flux (y compris un MemoryStream) et un écrivain (y compris un StringWriter). C'est en supposant que vous voulez vraiment passer par un DataSet - si vous êtes heureux d'obtenir le XML directement sans utiliser un DataSet alors utilisez simplement les suggestions de Marc.

1

Vous pouvez appeler la surcharge de WriteXml qui écrit dans un cours d'eau, et d'utiliser un MemoryStream, bien que vous puissiez dire que vous voulez que le XML comme une grande chaîne longue.

Questions connexes