.net 解析来自Web服务的XML结果

.net 解析来自Web服务的XML结果,.net,xml,web-services,parsing,.net,Xml,Web Services,Parsing,我不熟悉Web服务和XML,负责解析返回的XML响应数据包 在C#.NET中解析XML结果的最佳方法是什么 我需要绑定到数据网格,作为搜索查询的最终结果。如果您可以访问Web服务的wsdl,则有一个实用工具wsdl,它将生成所需的类和反序列化,以调用Web服务并将其响应解析为这些类 使用位于的示例webservice,您只需运行以下命令行: wsdl "http://www.w3schools.com/webservices/tempconvert.asmx?WSDL" 这将生成一个文件Tem

我不熟悉Web服务和XML,负责解析返回的XML响应数据包

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


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

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

使用位于的示例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服务的复杂性,这甚至可以像字符串数组一样简单,也可以像巨型类继承权一样复杂。

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


您有用于响应数据包的XSD吗?

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

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

添加:使用System.Xml

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


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

如果没有WSDL,可以使用下面的库

您还可以使用LINQ,也可以使用

System.Xml.Linq

LINQ绑定的命名空间


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

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

对于XMLDocument类对象,整个XML被加载到内存中,而对于reader对象,它是一个流,只有正在处理的块被加载到内存中。显然,读卡器使用的内存很少,但不会让您返回/返回正在处理的当前节点。虽然您可以自由使用文档,但缺点是内存中有xml文件的副本


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

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

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

就个人而言,我从不喜欢将XML转换为数据集,除非我有时间为XML文档创建特定的模式。因此,我倾向于第一个选项。

注意,提供的链接指向.NET 1.1,但页面上应该是指向较新版本的链接。回答得好,Sesh!您已经说明了我回避XmlDocuments的一些原因。我几乎总是使用XPathDocument/XPathNavigator对象,它们的速度要快得多,尽管可能不如XmlDocument直观。