题
在 C# 中,如果我需要打开 HTTP 连接、下载 XML 并从结果中获取一个值,我该怎么做?
为了保持一致性,假设 Web 服务位于 www.webservice.com,并且如果您向它传递 POST 参数 fXML=1,它会返回给您
<xml><somekey>somevalue</somekey></xml>
我希望它能吐出“somevalue”。
解决方案
我使用这段代码并且效果很好:
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);
其他提示
你可以使用类似的东西:
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);
}
注意我没有机会测试这段代码,但它应该可以工作:)
还值得补充的是,如果您需要专门使用 POST 而不是 SOAP,那么您可以配置 Web 服务来接收 POST 调用:
查看 MSDN 上的页面:使用 ASP.NET 创建的 XML Web 服务的配置选项
不隶属于 StackOverflow