2017-09-16 141 views
0

我使用此web服務http://www.webservicex.com/globalweather.asmx?WSDL以國家名稱獲取所有城市名稱。我用下面的代碼來獲得響應使用WSDL WebService填充組合框

GlobalWeatherReference.GlobalWeatherSoapClient weather = new GlobalWeatherReference.GlobalWeatherSoapClient("GlobalWeatherSoap12"); 
      cities_cb.DataSource = weather.GetCitiesByCountry("Chad").ToList(); 

這將返回

string 

<NewDataSet> 
    <Table> 
    <Country>Chad</Country> 
    <City>Sarh</City> 
    </Table> 
    <Table> 
    <Country>Chad</Country> 
    <City>Abeche</City> 
    </Table> 
    <Table> 
    <Country>Chad</Country> 
    <City>Moundou</City> 
    </Table> 
    <Table> 
    <Country>Chad</Country> 
    <City>Ndjamena</City> 
    </Table> 
    <Table> 
    <Country>Chad</Country> 
    <City>Bokoro</City> 
    </Table> 
    <Table> 
    <Country>Chad</Country> 
    <City>Bol-Berim</City> 
    </Table> 
    <Table> 
    <Country>Chad</Country> 
    <City>Am-Timan</City> 
    </Table> 
    <Table> 
    <Country>Chad</Country> 
    <City>Pala</City> 
    </Table> 
    <Table> 
    <Country>Chad</Country> 
    <City>Faya</City> 
    </Table> 
</NewDataSet> 

現在我需要通過城市名稱來填充組合框。請幫忙。

回答

2

你需要得到響應,並使用StringReader如下,

List<string> cityNames = new List<string>(); 
GlobalWeatherReference.GlobalWeatherSoapClient client = new GlobalWeatherReference.GlobalWeatherSoapClient("GlobalWeatherSoap12"); 
var allCountryCities = client.GetCitiesByCountry("Chad"); 
if (allCountryCities.ToString() == "Data Not Found") 
{ 

} 
DataSet ds = new DataSet(); 
//Creating a stringReader object with Xml Data 
StringReader stringReader = new StringReader(allCountryCities); 
// Xml Data is read and stored in the DataSet object 
ds.ReadXml(stringReader); 
//Adding all city names to the List objects 
foreach (DataRow item in ds.Tables[0].Rows) 
{ 
    cityNames.Add(item["City"].ToString()); 
}  
cities_cb.DataSource = cityNames; 
1

你可以使用這個網絡資源基於XML Schema的C#類,例如:http://xmltocsharp.azurewebsites.net/ 你得到這些類後:

[XmlRoot(ElementName = "Table")] 
public class Table 
{ 
    [XmlElement(ElementName = "Country")] 
    public string Country { get; set; } 
    [XmlElement(ElementName = "City")] 
    public string City { get; set; } 
} 

[XmlRoot(ElementName = "NewDataSet")] 
public class NewDataSet 
{ 
    [XmlElement(ElementName = "Table")] 
    public List<Table> Table { get; set; } 
} 

那麼你需要序列化從WS使用類型NewDataSet

的響應
 GlobalWeatherSoapClient gwsc = new GlobalWeatherSoapClient("GlobalWeatherSoap12"); 
     var response = gwsc.GetCitiesByCountry("Chad"); 
     XmlSerializer xmlSerializer = new XmlSerializer(typeof(NewDataSet)); 
     var dataSet = xmlSerializer.Deserialize(new MemoryStream(Encoding.UTF8.GetBytes(response))) as NewDataSet; 
     if (dataSet != null) 
     { 
      var cities = dataSet.Table.Select(x => x.City).ToList(); 
     }