从控制台应用程序

时间:2016-11-02 08:21:26

标签: c# c#-4.0

我想要完成的是从网站(http://xml.buienradar.nl/)读取xml文件。我一直在阅读有关使用的内容,但我无法看到森林中的树木!我应该使用WebRequest,XmlDocument,XDocument,XmlReader,XmlTextReader,还是?我读到XmlDocument和XDocument将整个文件读入内存,XmlReader没有。但在这种情况下这是一个问题吗?如果xml文件确实很大怎么办?

有人可以帮我找路吗?

谢谢!

2 个答案:

答案 0 :(得分: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。

超过30 MB gzip压缩。使用这种方法,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);
    }
}

答案 1 :(得分:1)

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

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

XmlTextReader xml=new XmlTextReader(url);

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