如何从C#中的XML Web服务获得价值?

时间:2020-03-05 18:49:48  来源:igfitidea点击:

在C#中,如果需要打开HTTP连接,下载XML并从结果中获取一个值,我该怎么做?

为了保持一致性,想象一下Web服务位于www.webservice.com上,如果我们将其传递给POST参数fXML = 1,它将返回给我们

<xml><somekey>somevalue</somekey></xml>

我希望它吐出" somevalue"。

解决方案

回答

我认为先阅读以下内容会很有用:

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

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

回答

我们可以使用类似这样的方法:

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);                
}

注意,我没有机会测试此代码,但它应该可以工作:)

回答

我使用此代码,它很好用:

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);

回答

还可能值得补充的是,如果我们需要专门使用POST而不是SOAP,则可以将Web服务配置为接收POST调用:

查阅MSDN上的页面:
使用ASP.NET创建的XML Web Services的配置选项