2012-10-01 21 views
11

xmlファイルをXmlReaderで解析するコードをすでに書いていますので、書き直したくありません。私は今プログラムに暗号化を追加しました。私はxmlドキュメントと暗号化アルゴリズムを取る関数encrypt()とdecrypt()を持っています。私は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

private static XDocument DocumentToXDocumentReader(XmlDocument doc) { return XDocument.Load(new XmlNodeReader(doc)); } 
[フラッシュ()メソッドにドキュメント(による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。これはいくつかのパフォーマンスの低い方法を排除します。

関連する問題