4

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

为了保持一致性,假设 Web 服务位于 www.webservice.com,如果您将 POST 参数 fXML=1 传递给它,它会返回给您

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

我希望它吐出“somevalue”。

4

4 回答 4

4

我认为首先阅读此内容会很有用:

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

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

于 2008-09-09T02:30:19.360 回答
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;

编辑:我刚刚意识到你在谈论一个网络服务,而不仅仅是普通的 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);
于 2008-09-09T04:31:03.610 回答
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);                
}

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

于 2008-09-09T02:38:11.573 回答
0

值得补充的是,如果您需要专门使用 POST 而不是 SOAP,那么您可以配置 Web 服务以接收 POST 调用:

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

于 2008-09-09T08:23:43.707 回答