Windows 窗体:从网站到 dataGridView 的 XML
Posted
技术标签:
【中文标题】Windows 窗体:从网站到 dataGridView 的 XML【英文标题】:Windows Forms: XML from website to dataGridView 【发布时间】:2021-07-27 16:51:28 【问题描述】:我想将this XML 的特定部分直接导入到我在 Windows 窗体中的 dataGridView 中,无需下载 XML 文件。
当前工作代码,正在下载完整文件(不需要):
var wd = new WebClient();
wd.DownloadFile("https://www.aviationweather.gov/adds/dataserver_current/current/metars.cache.xml", @"c:\temp\metars.xml");
var ds = new DataSet();
ds.ReadXml(@"c:\temp\metars.xml");
dataGridView1.DataSource = ds.Tables["METAR"];
有没有办法直接从链接中获取一部分XML,例如当station_id=CYDL时的METAR信息到dataGridView?
【问题讨论】:
使用临时文件有什么问题? @UweKeim 目标不是在驱动器上创建任何额外的文件,即使它可以被删除。组织偏好 【参考方案1】:您可以通过流下载内容,而不是像这样保存到文件中:
using var client = new HttpClient();
using var contentStream = await client.GetStreamAsync("https://www.aviationweather.gov/adds/dataserver_current/current/metars.cache.xml");
var ds = new DataSet();
ds.ReadXml(contentStream);
dataGridView1.DataSource = ds.Tables["METAR"];
或者,如果您更喜欢非异步 (await
) 方式:
using var client = new HttpClient();
var streamTask = client.GetStreamAsync("https://www.aviationweather.gov/adds/dataserver_current/current/metars.cache.xml");
streamTask.Wait();
using var contentStream = streamTask.Result;
var ds = new DataSet();
ds.ReadXml(contentStream);
dataGridView1.DataSource = ds.Tables["METAR"];
【讨论】:
你必须从GetStreamAsync
dispose the returned stream吗?
@UweKeim 我认为HttpClient
会在它自己处理时这样做,所以如果你不处理HttpClient
你可能应该明确地这样做。为了更好地衡量,我已经更新了答案,但这取决于我相信你如何使用它。
@OttoTuhkunen 很高兴听到这个消息。如果您的问题已得到解答,请记住接受答案。以上是关于Windows 窗体:从网站到 dataGridView 的 XML的主要内容,如果未能解决你的问题,请参考以下文章
如何制作一个 C# Windows 窗体应用程序,为 Windows 应用商店转换,从 Windows 开始