2009-01-28 235 views
2

我是Web服务和XML的新手,并且负责解析返回的XML响应数据包。从Web服务解析XML结果

在C#.NET中解析XML结果的最佳方式是什么?

我需要绑定到数据网格作为搜索查询的最终结果。

回答

3

如果您有权访问web服务的wsdl,那么将会生成一个实用程序wsdl,该实用程序将生成所需的类和反序列化来调用Web服务并将其响应解析为这些类。

使用例如web服务在w3schools,你只要运行这个命令行:

wsdl "http://www.w3schools.com/webservices/tempconvert.asmx?WSDL" 

这将生成一个文件TempConvert.cs,你可以添加到您的项目。然后调用Web服务仅仅是一个调用生成的函数的事情:

Double fahrenheit = 32.2; 
TempConvert tempConverter = new TempConvert(); 
string Celcius = tempConverter.FahrenheitToCelsius(fahrenheit.ToString()); 

这TempConvert类需要的构建XML查询,web服务接触,并在解析将回复的细节问题这是一个超级 - 简单的例子,所以你只返回一个字符串,但由于你的webservice可能会更复杂一点,你会以解析的形式返回更复杂的包含你想要的数据的类。根据Web服务的复杂性,这甚至可以像字符串数组一样简单,或者像巨型类水印一样复杂。

0

有很多不同的方法来做到这一点,你可以反序列化的XML转换成一个对象,使用LINQ到XML提取数据,将XML加载到一个DOM和出XPATH数据等

你有响应数据包的XSD吗?

0

在C#中解析XML的最常见方法是在System.XML中使用XMLDocument。

但是,如果Web服务是基于SOAP的,最简单的方法就是将该服务的引用添加到项目中,并让该向导为您生成解析代码。

0

增加:使用的System.Xml

正如你细读XML的结构,你会看到在彼此元素(参见对象的XmlElement和XmlNode的)。每个都有子对象集合(XmlNode.ChildNodes [])。

XPath是一种导航到特定节点或节点子集的方式。有关基本概述,请阅读this article

1

如果剂量没有,你可以使用发现库下

System.Xml

一个WSDL您还可以使用LINQ可以使用

System.Xml.Linq的

的命名空间LINQ绑定。

您将需要查看数据包并找出该方案是什么。

+0

请注意,提供的链接指向.NET 1.1,但在页面上应链接到较新版本。 – OregonGhost 2009-01-28 17:18:45

3

在决定哪种技术最好之前,您应该了解一些关于XML解析的基本知识。

使用XMLDocument类型的对象将整个XML加载到内存中,与读者对象一样,它是一个流,只有正在处理的块被加载到内存中。显然,读者使用的内存很少,但不会让您有能力回到当前正在处理的节点之前/之后。尽管你对文档有很大的自由度,但缺点是内存中有xml文件的副本。

因此,如果xml的大小预计很大,那么XmlDocument将不是最优的。使用xml应用什么样的逻辑也会影响选择。

+0

好的答案,Sesh!你已经说明了我害怕XmlDocuments的一些原因。我几乎总是使用速度更快的XPathDocument/XPathNavigator对象,但可能不如XmlDocument那么直观。 – Cerebrus 2009-01-28 17:50:41

0

@LB:您还没有提及解析XML返回的目的。如果您正在对XML进行一些修改或查询某些特定数据,我会理解,但是如果您想简单加载它以便它可以显示在Datagrid中,那么我相信您有两个非常简单的(并且常规使用)选项:

  • 直接将DataGrid绑定到XML,或使用XmlDataSource作为中介。
  • 将XML加载到DataSet中并将您的DataGrid绑定到该Dataset。

就个人而言,我从来没有喜欢将XML转换为数据集,除非我有时间为XML文档创建特定的模式。所以,我倾向于第一种选择。