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