web-dev-qa-db-ja.com

xmldocumentをストリームに保存する方法

XmlReaderを使用してxmlファイルを解析するコードをすでに記述しているので、それを書き直したくありません。プログラムに暗号化を追加しました。 xmlドキュメントと暗号化アルゴリズムを取得するencrypt()およびdecode()関数があります。 xmlリーダーを使用してファイルを解析する関数がありますが、xmlドキュメントではxmlreaderの作成方法がわかりません。

問題は、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....... } }
12
user1711383

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
39
Aghilas Yakoub

ファイルへの書き込み:

 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);
        }
    }
1
PReghe

これは古い質問だと思いますが、これからメソッドを追加する価値があると思いました 素敵な小さなブログ投稿 。これにより、パフォーマンスの低いメソッドがいくつか除外されます。

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

これを試して

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