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"];

【讨论】:

你必须从GetStreamAsyncdispose the returned stream吗? @UweKeim 我认为HttpClient 会在它自己处理时这样做,所以如果你不处理HttpClient 你可能应该明确地这样做。为了更好地衡量,我已经更新了答案,但这取决于我相信你如何使用它。 @OttoTuhkunen 很高兴听到这个消息。如果您的问题已得到解答,请记住接受答案。

以上是关于Windows 窗体:从网站到 dataGridView 的 XML的主要内容,如果未能解决你的问题,请参考以下文章

从 Windows 窗体过渡到 WPF

如何制作一个 C# Windows 窗体应用程序,为 Windows 应用商店转换,从 Windows 开始

从 DoubleClick、Web 应用程序而非 Windows 窗体上的 ListBox 获取选定值

将音频文件从 Windows 窗体应用程序资源复制到硬盘

如何在 Windows 窗体应用程序和网站之间进行通信?

如果图像的值为空,则将图像从数据库加载到 Windows 窗体中