2016-11-02 9 views
1

私が達成したいのは、ウェブサイト(http://xml.buienradar.nl/)からxmlファイルを読み込むことです。私は何を使うべきかを読んでいましたが、木の森は見えません! WebRequest、XmlDocument、XDocument、XmlReader、またはXmlTextReaderを使用する必要がありますか?私は、XmlDocumentとXDocumentがファイル全体をメモリに読み込み、XmlReaderが読み込まないことを読んでいます。しかし、この場合の問題ですか?確かにxmlファイルが巨大な場合はどうなりますか?コンソールアプリケーションからWebサイトからXMLファイルを読む

私は方法を見つけるのを助けることができますか?

ありがとうございます!

+0

使用[XElementオブジェクト](https://www.dotnetperls.com/xelement) –

+1

'XmlReader'がメモリに全体のXMLをロードしませんが、それは' XDocument' –

+0

'VARドキュメントよりも多くのコードが必要になります= XDocument.Load( "http://xml.buienradar.nl/"); ' –

答えて

2

巨大な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); 
    } 
} 
+0

これは知っておくと良いことです。それは超臨界的なアプリケーションではないので、私は全部をメモリにロードすることを選択しました。 –

1

XmlTextReaderはXMLを読み取るためのより高速なメカニズムを提供します。

string url="http://xml.buienradar.nl/"; 

XmlTextReader xml=new XmlTextReader(url); 

while(xml.Read()) 
{ 
    Console.WriteLine(xml.Value); 
} 
関連する問題