C# で、HTTP 接続を開いて XML をダウンロードし、結果から 1 つの値を取得する必要がある場合、どうすればよいでしょうか?
一貫性を保つために、Web サービスが www.webservice.com にあり、それに POST 引数 fXML=1 を渡すと返されると想像してください。
<xml><somekey>somevalue</somekey></xml>
「somevalue」を吐き出してほしいです。
C# で、HTTP 接続を開いて XML をダウンロードし、結果から 1 つの値を取得する必要がある場合、どうすればよいでしょうか?
一貫性を保つために、Web サービスが www.webservice.com にあり、それに POST 引数 fXML=1 を渡すと返されると想像してください。
<xml><somekey>somevalue</somekey></xml>
「somevalue」を吐き出してほしいです。
最初にこれを読むと役に立つと思います:
Web サービスの作成と使用(.NET で)
これは、XML 入力の使用方法 (逆シリアル化) を含め、.NET での Web サービスの使用方法に関する一連のチュートリアルです。
私はこのコードを使用していますが、うまく機能します:
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 だけでなく、Web サービスについて話していることに気付きました。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);
}
このコードをテストする機会はありませんでしたが、動作するはずです:)
また、SOAP ではなく POST を特に使用する必要がある場合は、POST 呼び出しを受信するように Web サービスを構成できることも追加する価値があります。
MSDN のページを確認してください: ASP.NET を使用して作成された XML Web サービスの構成オプション