从asmx服务获取返回字符串XML的节点,C#

时间:2016-02-06 01:37:51

标签: c# xml asp.net-mvc web-services soap

我正在尝试查询返回以下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包含麻烦的字符串

感谢您的帮助,谢谢。

1 个答案:

答案 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"的说明绑定它。