2012-04-25 12 views
3

これと他のフォーラムを数時間、数日間読んでいて、私の石鹸の反応の解決策を見つけることができません。ここでの回答のすべての種類をしようとしてきたが、私の応答を解析することはできません:(monodevelop parse soap response

私の応答:これまでの

<?xml version="1.0" encoding="utf-8"?> 
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <soapenv:Body> 
     <getLocationsResponse xmlns="http://getlocations.ws.hymedis.net"> 
      <locs> 
       <loc> 
        <name>Zeebrugge Wielingen Zand</name> 
        <abbr>ZWZ</abbr> 
        <RDX>1435.8</RDX> 
        <RDY>378678.6</RDY> 
        <params> 
         <param>GHs</param> 
         <param>SS10</param> 
        </params> 
       </loc> 
      </locs> 
     </getLocationsResponse> 
    </soapenv:Body> 
</soapenv:Envelope> 

私のC#コード(パラメータのsoapresponseは、文字列形式で全soapresponseである)私の応答があります>ので、それらにはデータが.. plzは私を助けていない

答えて

2

- 正しい、完全なXML、SOAP応答ので、それは良い

public void readXml(string soapresponse){ 
     XmlDocument xmlresponse = new XmlDocument(); 
     xmlresponse.LoadXml(soapresponse); 

     XmlNamespaceManager nsmanager = new XmlNamespaceManager(xmlresponse.NameTable); 
     nsmanager.AddNamespace ("soapenv", "http://schemas.xmlsoap.org/soap/envelope/"); 

     XmlNodeList nodes = xmlresponse.SelectNodes("/soapenv:Envelope/soapenv:Body/getLocationsResponse/locs/loc", nsmanager); 
     List<Locatie> locatielijst = new List<Locatie>(); 
     // loop 
     foreach(XmlNode node in nodes){ 
      string loc_naam = node["name"].InnerText; 
      string loc_code = node["abbr"].InnerText; 
      ... 
      Locatie locatie = new Locatie(); 
      locatie.loc_naam = loc_naam; 
      locatie.loc_code = loc_code; 
      ... 
      locatielijst.Add (locatie); 
     } 

     Console.WriteLine(locatielijst.Count.ToString()); 
     foreach(Locatie loc in locatielijst){ 
      Console.WriteLine (loc.loc_code); 
     } 

    } 

が、私のlist.countは0を返すたびに解析することはできません!次のコードは動作するかもしれません。

 
    public class MainClass 
    { 
     public static void Main(string[] args) 
     { 
      var response = new FileStream("Response.xml", FileMode.Open); 

      XDocument doc = XDocument.Load(response); 
      XNamespace xmlns = "http://getlocations.ws.hymedis.net"; 

      var nodes = doc.Descendants(xmlns + "locs") 
           .Elements(xmlns + "loc"); 

      var list = new List(); 
      foreach (var node in nodes) 
      { 
       list.Add(new Location { 
        Name = node.Element(xmlns + "name").Value, 
        Code = node.Element(xmlns + "abbr").Value 
       }); 
      } 

      foreach (var item in list) { 
       Console.WriteLine(item.Code); 
      } 
     } 

     public class Location 
     { 
      public string Code { get; set; } 
      public string Name { get; set; } 
     } 
    } 

私はモノではあまり経験がありませんが、.netはWCF SOAPサービスを非常に使いやすくしました。 この記事では、WCFサービスのプロキシクラスを生成する方法について説明します。 http://johnwsaunders3.wordpress.com/2009/05/17/how-to-consume-a-web-service/

これが役立ちます。

よろしくお願いします。 Wouter Willaert