如何在C#中从XML Web服务获取值?

5
在C#中,如果我需要打开一个HTTP连接,下载XML并从结果中获取一个值,我该如何做?
为了保持一致性,请想象webservice位于www.webservice.com,并且如果您传递POST参数fXML=1,则会返回:
<xml><somekey>somevalue</somekey></xml>

我希望它能输出“somevalue”。
4个回答

4

我认为首先阅读以下内容会很有帮助:

创建和使用Web服务 (.NET)

这是一系列关于如何在.NET中使用Web服务的教程,包括如何使用XML输入(反序列化)。


3

我使用这段代码,它非常好用:

System.Xml.XmlDocument xd = new System.Xml.XmlDocument;
xd.Load("http://www.webservice.com/webservice?fXML=1");
string xPath = "/xml/somekey";
// this node's inner text contains "somevalue"
return xd.SelectSingleNode(xPath).InnerText;

编辑:我刚才意识到您谈论的是Web服务而不仅仅是普通的XML。在Visual Studio解决方案中,尝试右键单击“解决方案资源管理器”中的“引用”,然后选择“添加Web引用”。会出现一个对话框,要求输入URL,您可以直接粘贴它:http://www.webservice.com/webservice.asmx。VS将自动生成所需的所有帮助程序。然后,您只需调用:

com.webservice.www.WebService ws = new com.webservice.www.WebService();
// this assumes your web method takes in the fXML as an integer attribute
return ws.SomeWebMethod(1);

您正在通过GET而不是POST传递参数,这与作者的要求不符。 - aku
抓取 aku 的 POST 信息并编辑答案 - 我还没有 2k 声望 :) - Michael Pryor

2
您可以使用类似这样的方法:

您可以采用以下方式:

var client = new WebClient();
var response = client.UploadValues("www.webservice.com", "POST", new NameValueCollection {{"fXML", "1"}});
using (var reader = new StringReader(Encoding.UTF8.GetString(response)))
{
    var xml = XElement.Load(reader);
    var value = xml.Element("somekey").Value;
    Console.WriteLine("Some value: " + value);                
}

请注意,我没有测试过这段代码,但它应该可以工作 :)


这看起来对于一个 Web 服务来说是非常繁琐而且开销巨大的工作! - Rob Cooper
Rob,网络服务并不总是WSDL\SOAP的好处。有时您需要自己从服务器获取和解析数据。这个问题中奇怪的一件事是POST方法。通常这样简单的服务使用GET。 - aku

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接