Windows应用程序,用于从包含XML数据的网站获取XML数据

时间:2010-09-26 13:35:35

标签: c# .net xml winforms web-services

我正在尝试用C#开发的Windows窗体应用程序(或WPF)。我的应用程序的要求是从包含xml的网站获取与用户搜索相关的xml节点数据。应用程序将连接到包含xml的网站,并从网站获取相关的xml节点。然后我会在我的Windows应用程序上显示xml节点数据。什么是最好的方法,还有一个扩展是获取所有的xml并存储在数据层中。 一个示例网站我将与此页面类似 http://www.amk.ca/quotations/sherlock-holmes.xml

1 个答案:

答案 0 :(得分:4)

不完全确定您的问题是什么 - 您是否在询问如何实现这一目标(下载XML),或者在哪里做到最好,或者是什么?

要获取XML,请使用以下内容:

using System.Net;

WebClient client = new WebClient();
string result = client.DownloadString("http://www.amk.ca/quotations/sherlock-holmes.xml");

你得到一个XML字符串,你现在可以使用XmlDocument或XDocument(Linq-to-XML)解析 - 你问这个怎么做?

或者如果你知道你提前打算使用哪些网站和XML格式,你也可以下载XML并从中生成XML模式,然后在第二步中从XML模式中生成C#类。适合于将XML字符串反序列化为例如的枚举Quotation个类(基于提供的示例XML中的<quotation>标记)。

更新:如果您有一个示例XML作为文件,您可以使用xsd.exe命令行实用程序从XML生成XML架构,并基于该XML架构,您可以创建一个用于反序列化的C#类。有关详细信息,请参阅MSDN docs for xsd.exe

基本上,调用xsd.exe (yourfile.xml)将根据您的XML输入文件生成yourfile.xsd XML架构,并且运行xsd.exe /c (yourfile.xsd)将从该XML架构生成C#类。

使用它,您可以在一步中将XML反序列化为C#类,然后通过浏览C#类,其属性及其子元素列表来“探索”XML的内容。

反序列化看起来像这样:

XmlSerializer deserializer = new XmlSerializer(typeof(ThatDataTypeGenerated));

object result = deserializer.Deserialize(<either a file name, or a stream or something>);

只要您提前知道,您将获得什么样的XML类型(这样您就可以提前生成XML模式和C#类)。

此外,您可以在Visual Studio中执行第一步(将XML数据文件转换为模式)(菜单“XML” - >“生成XML模式”),然后执行第二步(转换XSD XML模式)进入C#类),您可以查看类似Xsd2Code的内容。