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

本文关键字:服务 asmx 获取 节点 返回 字符串 XML | 更新日期: 2023-09-27 18:33:36

>我正在尝试查询返回以下 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);

//响应。内容包含麻烦的字符串

我将不胜感激你的帮助,谢谢。

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

看起来您的 XML 由包装在名为 "{http://www.webserviceX.NET}string" 的根元素中的DataSet.WriteXml(writer, XmlWriteMode.IgnoreSchema)的输出组成。 因此,最简单的方法是将内部 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,您可以按照从数据库填充下拉列表的正确方法是什么?、下拉列表数据源和/或使用DataTextField = "City"数据绑定下拉列表中的说明绑定它。