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