2017-08-03 13 views
0

私は約900MBのXMLファイルを持っており、データテーブルからその既存のXMLにデータを挿入したいと思います。データテーブルから新しいデータを挿入する

負荷を使用してこれを行うと、以下のように保存する方法があります。

XDocument xdoc = XDocument.Load(FilePath); 
var root = xdoc.Descendants("DocumentElement").FirstOrDefault() 
if (root != null){ 
    root.Add(new XElement("tag", "value")); 
    xdoc.Save(FilePath); 
} 

しかし、その費用はあまりにも高い。データテーブルに900MB xmlをロードすると、メモリ例外が発生し、新しい行のカップルのパフォーマンスが低下する可能性があります。

にはどうすればいいのDataTableから大きな既存のXMLに新しい行を追加することができますか?

答えて

0

XDocument(およびXmlDocumentも同様)は、ファイル全体をメモリにロードします。あなたはXNode.WriteTo方法の組み合わせでXmlWriterを使用する必要があります

XNode.WriteToドキュメントから:あなたは、同じように大きなXML文書を読んXNode.ReadFromドキュメントの例を確認することができます

StringBuilder sb = new StringBuilder(); 
XmlWriterSettings xws = new XmlWriterSettings(); 
xws.OmitXmlDeclaration = true; 
xws.Indent = true; 

using (XmlWriter xw = XmlWriter.Create(sb, xws)) 
{ 
    XElement child2 = new XElement("AnotherChild", 
    new XElement("GrandChild", "different content")); 
    child2.WriteTo(xw); 
    xw.WriteEndElement(); 
} 

Console.WriteLine(sb.ToString()); 

関連する問題