从Web服务解析XML结果

时间:2009-01-28 16:42:04

标签: .net xml web-services parsing

我是Web Services和XML的新手,负责解析返回的XML响应数据包。

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

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

7 个答案:

答案 0 :(得分:3)

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

使用w3schools处的示例webservice,您只需运行以下命令行:

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

这将生成一个可以添加到项目中的TempConvert.cs文件。然后调用webservice就是调用生成的函数:

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

TempConvert类负责构建XML查询,联系web服务以及解析回复的细节。这是一个非常简单的示例,因此您只能返回一个字符串,但由于您的Web服务很可能更复杂的是,您将在解析的表单中找到包含所需数据的更复杂的类。根据Web服务的复杂性,这甚至可以像字符串数组一样简单,也可以像巨型类层次结构一样复杂。

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:1)

如果没有WSDL,您可以使用

下的库

System.Xml

你也可以使用LINQ,你可以使用

System.Xml.Linq的

LINQ绑定的命名空间。

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

答案 3 :(得分:0)

有很多不同的方法可以做到这一点,你可以将xml反序列化为一个对象,使用LINQ-to-XML来提取数据,将XML加载到DOM中,然后将数据输出x,等等。

您是否有响应数据包的XSD?

答案 4 :(得分:0)

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

但是,如果Web服务是基于SOAP的,那么使用它的最简单方法是向项目添加对服务的引用,并让向导为您生成解析代码。

答案 5 :(得分:0)

添加:使用System.Xml

当您仔细阅读XML的结构时,您将看到彼此之间的元素(请参阅对象XmlElement和XmlNode)。每个都有子对象集合(XmlNode.ChildNodes [])。

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

答案 6 :(得分:0)

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

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

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

相关问题