5 Stimmen

Wie erhalte ich einen Wert von einem XML-Webdienst in C#?

In C#, wenn ich eine HTTP-Verbindung öffnen, XML herunterladen und einen Wert aus dem Ergebnis erhalten müssen, wie würde ich das tun?

Um die Konsistenz zu gewährleisten, stellen Sie sich vor, der Webservice befindet sich auf www.webservice.com und wenn Sie ihm das POST-Argument fXML=1 übergeben, erhalten Sie folgende Rückmeldung

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

Ich möchte, dass es "somevalue" ausspuckt.

4voto

Jon Limjap Punkte 92084

Ich denke, es wird nützlich sein, dies zuerst zu lesen:

Erstellen und Abrufen eines Webdienstes (in .NET)

Dies ist eine Reihe von Tutorials zur Verwendung von Webdiensten in .NET, einschließlich der Verwendung von XML-Eingaben (Deserialisierung).

3voto

travis Punkte 34588

Ich verwende diesen Code und er funktioniert hervorragend:

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;

EDIT: Mir ist gerade klar geworden, dass Sie von einem Webservice und nicht nur von einfachem XML sprechen. Versuchen Sie, in Ihrer Visual Studio Solution mit der rechten Maustaste auf References im Solution Explorer zu klicken und wählen Sie "Add a Web Reference". Es erscheint ein Dialog, in dem Sie nach einer URL gefragt werden, die Sie einfach einfügen können: " http://www.webservice.com/webservice.asmx ". VS generiert automatisch alle Helfer, die Sie benötigen. Dann können Sie einfach aufrufen:

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

2voto

aku Punkte 118808

Sie können so etwas verwenden:

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

Hinweis: Ich hatte noch keine Gelegenheit, diesen Code zu testen, aber er sollte funktionieren :)

0voto

Rob Cooper Punkte 28132

Wenn Sie speziell POST und nicht SOAP verwenden wollen, können Sie den Webdienst so konfigurieren, dass er POST-Aufrufe empfängt:

Sehen Sie sich die Seite auf MSDN an: Konfigurationsoptionen für mit ASP.NET erstellte XML-Webdienste

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X