2012-10-01 22 views
11

ya he escrito código para analizar mi archivo XML con una XmlReader así que no quiero volver a escribir. Ahora he agregado el cifrado al programa. He cifrar() y descifrar() funciones que toman un documento XML y el algoritmo de cifrado. Tengo una función que utiliza un lector XML para analizar el archivo, pero ahora con el documento XML no estoy seguro de cómo crear el xmlreader.cómo guardar XmlDocument para una corriente

La pregunta es cómo guardar mi documento XML a un arroyo. Estoy seguro de que es simple, pero no sé nada sobre las transmisiones.

XmlDocument doc = new XmlDocument(); 
     doc.PreserveWhitespace = true; 
     doc.Load(filep); 
     Decrypt(doc, key); 

     Stream tempStream = null; 
     doc.Save(tempStream); // <--- the problem is here I think 

     using (XmlReader reader = XmlReader.Create(tempStream)) 
     { 
      while (reader.Read()) 
      { parsing code....... } } 

Respuesta

32

Usted puede tratar con MemoryStream clase

XmlDocument xmlDoc = new XmlDocument(); 
MemoryStream xmlStream = new MemoryStream(); 
xmlDoc.Save(xmlStream); 

xmlStream.Flush();//Adjust this if you want read your data 
xmlStream.Position = 0; 

//Define here your reading 
+4

Según los [docs sobre el método Flush()] (http://msdn.microsoft.com/en-us/library/system.io.memorystream.flush%28v=vs.110%29 .aspx): 'porque cualquier los datos escritos en un objeto MemoryStream se escriben en la memoria RAM, este método es redundant'. Deben suprimir las que a partir de su respuesta ya que es esencialmente un "NOOP". – MarioDS

0

Escribir en un archivo:

static void Main(string[] args) 
    { 
     XmlDocument doc = new XmlDocument(); 
     doc.LoadXml("<FTPSessionOptionInfo><HostName>ftp.badboymedia.ca</HostName></FTPSessionOptionInfo>"); 

     using (StreamWriter fs = new StreamWriter("test.xml")) 
     { 
      fs.Write(doc.InnerXml); 
     } 
    } 
0

probar esto

XmlDocument document= new XmlDocument(); 
    string pathTmp = "d:\somepath"; 
    using(FileStream fs = new FileStream(pathTmp, FileMode.CreateNew)) 
    { 
     document.Save(pathTmp); 
     fs.Flush(); 
    } 
0

Comprendo que esto es una vieja pregunta, pero pensé que valía la pena agregar un método de este nice little blog post. Esto elimina algunos métodos menos efectivos.

private static XDocument DocumentToXDocumentReader(XmlDocument doc) 
{ 
    return XDocument.Load(new XmlNodeReader(doc)); 
} 
Cuestiones relacionadas