获取xml中的标记名称

时间:2014-08-29 08:45:13

标签: c# xml

我在解析xml文件时遇到问题,无法检索标签名称。我有一个以下的xml文件:

<city version="1.2" last_updated="Thu, 28 Aug 2014 12:10:38 +0300">
  <city id="8750">
    <name>Лондон</name>
    <name_en>London</name_en>
    <region/>
    <country>Великобритания</country>
    <country_id>826</country_id>
  </city>
  <city id="110254">
    <name>Лондон</name>
    <name_en>London</name_en>
    <region/>
    <country>Канада</country>
    <country_id>124</country_id>
  </city>
    <city id="58690">
    <name>Лондон</name>
   <name_en>London</name_en>
   <region>Arkansas</region>
   <country>Соединенные Штаты Америки</country>
   <country_id>840</country_id>
  </city>
  <city id="65450">
    <name>Лондон</name>
    <name_en>London</name_en>
    <region>Kentucky</region>
    <country>Соединенные Штаты Америки</country>
    <country_id>840</country_id>
  </city>
  <city id="76284">
    <name>Лондон</name>
    <name_en>London</name_en>
    <region>Ohio</region>
    <country>Соединенные Штаты Америки</country>
    <country_id>840</country_id>
  </city>
  <city id="131">
    <name>Макеевка</name>
    <name_en>Makiivka</name_en>
    <region>Донецкая область</region>
    <country>Украина</country>
    <country_id>804</country_id>
  </city>
</city>

我想做数组或选择包含所有标记名称的列表,例如country。我有以下代码:

  string filePath = String.Format("http://xml.weather.co.ua/1.2/city/?search={0}", name);
            var xmlDocument = new XmlDocument();
            xmlDocument.Load(filePath);

            if (xmlDocument.DocumentElement != null)
                foreach (XmlNode xmlNode in xmlDocument.GetElementsByTagName("city"))

                    yield return new SelectListItem
                    {

                        Text = xmlNode.Value,
                        Value = xmlNode.ToString()
                    };
        }

如何解决这个问题?有什么想法吗?

2 个答案:

答案 0 :(得分:1)

这是我的想法,但您必须先创建列表“名称”。试试这个LINQ to xml:

XDocument xDoc = XDocument.Load("your xml file");
foreach (var elem in xDoc.Document.Descendants("country"))
{
    names.Add(elem.Name);
}

如果您可以为我修改xml更清晰的形式:

<city id="8750" name="Лондон" name_en="London" region="" country="Великобритания" country_en="826"/>

如何创建只有名称的标签数量? 你可以这样做:

XDocument xDoc = XDocument.Load("your xml file");
foreach (var elem in xDoc.Document.Descendants("city"))
{
    names.Add(elem.Attribute("name").Value);
    name_en.Add(elem.Attribute("name_en").Value);
    (...)
}

答案 1 :(得分:0)

  

“我想做数组或选择包含所有标记名称的列表,例如country。”

     

“我想用标签国家获得所有价值,我不知道如何”

您可以尝试使用XDocument获取国家/地区名称数组:

string url = "http://xml.weather.co.ua/1.2/city/?search=%D0%BB%D0%BE%D0%BD%D0%B4%D0%BE%D0%BD";
XDocument doc = XDocument.Load(url);
var countries = doc.Descendants("city")
                   .Elements("country")
                   .Select(o => (string)o)
                   .ToArray();