我正在尝试查询返回以下xml的公共Web服务:
此XML文件似乎没有与之关联的任何样式信息。文档树如下所示。
<string xmlns="http://www.webserviceX.NET">
<NewDataSet> <Table> <Country>Maldives</Country> <City>Gan</City> </Table> <Table> <Country>Maldives</Country> <City>Male</City> </Table> </NewDataSet>
</string>
如何获取c#中的城市列表以加载下拉列表?
这是我的代码:
var restClient = new RestClient("http://www.webservicex.net/globalweather.asmx/GetCitiesByCountry");
var request = new RestRequest(Method.GET);
// request.Resource = "{version}/token";
request.AddParameter("CountryName", "Maldives");
var response = restClient.Execute(request);
// response.Content包含麻烦的字符串
感谢您的帮助,谢谢。
答案 0 :(得分:1)
看起来您的XML包含DataSet.WriteXml(writer, XmlWriteMode.IgnoreSchema)
的输出,该输出包含在名为"{http://www.webserviceX.NET}string"
的根元素中。因此,最简单的方法是将内部XML反序列化为DataSet
,然后绑定相应DataTable
的相应列:
首先,反序列化集合:
var rootElement = XElement.Parse(xmlString); // xmlString is //response.Content
var set = new DataSet();
var setElement = rootElement.DescendantsAndSelf().Where(e => e.Name.LocalName == "NewDataSet").FirstOrDefault();
if (setElement != null)
{
using (var reader = setElement.CreateReader())
{
set.ReadXml(reader, XmlReadMode.Auto);
}
}
接下来,选择一个名为"City"
的列:
var table = set.Tables.Cast<DataTable>().FirstOrDefault(t => t.Columns["City"] != null);
现在您有了DataTable
,您可以按照What is the right way to populate a DropDownList from a database?,DropdownList DataSource和/或Databind a dropdownlist中使用DataTextField = "City"
的说明绑定它。