2017-09-16 139 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(); 
     }