2012-10-01 27 views
11

我已經編寫了代碼來解析我的xml文件,其中包含XmlReader,因此我不想重寫它。我現在已經爲程序添加了加密功能。我有加密()和解密()函數採取XML文件和加密算法。我有一個函數使用XML讀取器來解析文件,但現在用XML文件,我不知道如何創建xmlreader。如何將xmldocument保存到流中

問題是如何將我的xml文檔保存到流中。我相信這很簡單,但我不知道任何有關流的信息。

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....... } } 

回答

32

你可以用MemoryStream

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

按照[根據沖洗()方法的文檔(http://msdn.microsoft.com/en-us/library/system.io.memorystream.flush%28v=vs.110%29 .aspx):'因爲寫入MemoryStream對象的任何數據都寫入RAM,所以這種方法是冗餘的。應該從你的答案中刪除它,因爲它本質上是一個「noop」。 – MarioDS

0

寫入文件試試:

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

試試這個

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

我意識到這是一個老問題,但認爲值得從中增加一種方法nice little blog post。這就限制了一些性能較差的方法。

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