Как получить значение из веб-службы XML в C #? - PullRequest
4 голосов
/ 09 сентября 2008

В C #, если мне нужно открыть HTTP-соединение, загрузить XML и получить одно значение из результата, как мне это сделать?

Для согласованности представьте, что веб-сервис находится на www.webservice.com, и если вы передадите ему аргумент POST fXML = 1, он вернет вам

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

Я бы хотел выплюнуть "somevalue".

Ответы [ 4 ]

4 голосов
/ 09 сентября 2008

Я думаю, что будет полезно прочитать это сначала:

Создание и использование веб-службы (в .NET)

Это серия руководств по использованию веб-сервисов в .NET, включая использование XML-ввода (десериализация).

3 голосов
/ 09 сентября 2008

Я использую этот код, и он прекрасно работает:

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 Solution попробуйте щелкнуть правой кнопкой мыши на References в Solution Explorer и выберите «Добавить веб-ссылку». Появится диалоговое окно с запросом 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);
2 голосов
/ 09 сентября 2008

Вы можете использовать что-то подобное:

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

Примечание. У меня не было возможности протестировать этот код, но он должен работать:)

0 голосов
/ 09 сентября 2008

Также стоит добавить, что если вам нужно специально использовать POST, а не SOAP, вы можете настроить веб-службу для приема вызовов POST:

Проверьте страницу на MSDN: Параметры конфигурации для веб-служб XML, созданных с использованием ASP.NET

...