巨大なXMLをすべてメモリにロードせずに読み取るには、XmlReader
クラスを使用できます。ただし、この方法はXDocument
またはXmlDocument
解決策よりも多くのコードを必要とすることに注意してください。
var h = WebRequest.CreateHttp("http://xml.buienradar.nl/");
using (var r = h.GetResponse())
using (var resp = r.GetResponseStream())
using (var sr = new StreamReader(resp))
using (var xr = new XmlTextReader(sr))
{
while (xr.Read())
{
// doing something with xr
// for example print it's current node value
Console.WriteLine(xr.Value);
}
}
あなたが大規模なXMLファイルをテストしたい場合は、http://www.ins.cwi.nl/projects/xmark/Assets/standard.gzからXMLを試すことができます。
gzippedが30 MBを超えています。この方法では、XML処理はメモリを必要とせず、ファイル全体のダウンロードが完了するのを待つことさえありません。
テストコード:
var h = WebRequest.CreateHttp("http://www.ins.cwi.nl/projects/xmark/Assets/standard.gz");
using (var r = h.GetResponse())
using (var resp = r.GetResponseStream())
using (var decompressed = new GZipStream(resp, CompressionMode.Decompress))
using (var sr = new StreamReader(decompressed))
using (var xr = new XmlTextReader(sr))
{
while (xr.Read())
{
// doing something with xr
// for example print it's current node value
Console.WriteLine(xr.Value);
}
}
使用[XElementオブジェクト](https://www.dotnetperls.com/xelement) –
'XmlReader'がメモリに全体のXMLをロードしませんが、それは' XDocument' –
'VARドキュメントよりも多くのコードが必要になります= XDocument.Load( "http://xml.buienradar.nl/"); ' –