C# 从控制台应用程序从网站读取XML文件

C# 从控制台应用程序从网站读取XML文件,c#,c#-4.0,C#,C# 4.0,我想要完成的是从网站()读取xml文件。我一直在读关于使用什么的书,但我看不到森林中的树木!我应该使用WebRequest、XmlDocument、XDocument、XmlReader、XmlTextReader还是?我读了XmlDocument和XDocument,将整个文件读入内存,而XmlReader没有。但在这种情况下这是一个问题吗?如果xml文件确实很大呢 有人能帮我找到一条路吗 谢谢 要读取巨大的XML而不将其全部加载到内存中,可以使用XmlReader类。但请注意,这种方法需要的

我想要完成的是从网站()读取xml文件。我一直在读关于使用什么的书,但我看不到森林中的树木!我应该使用WebRequest、XmlDocument、XDocument、XmlReader、XmlTextReader还是?我读了XmlDocument和XDocument,将整个文件读入内存,而XmlReader没有。但在这种情况下这是一个问题吗?如果xml文件确实很大呢

有人能帮我找到一条路吗


谢谢

要读取巨大的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文件,可以从中尝试XML

它的压缩容量超过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);
    }
}

XmlTextReader提供了一种更快的读取xml的机制

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

XmlTextReader xml=new XmlTextReader(url);

while(xml.Read())
{
   Console.WriteLine(xml.Value);
}

使用
XmlReader
不要将整个XML加载到内存中,但它需要的代码比
XDocument
var doc=XDocument.load(“http://xml.buienradar.nl/");@AlexanderPetrov我在你回答之前输入了这个,它就像一个符咒!我是否应该担心xml文件是否太长?@GarthMarenghi它将首先将整个xml加载到内存中。应该考虑一下。这很好。因为它不是一个超级关键的应用程序,所以我选择将整个应用程序加载到内存中。