2014-08-29 2 views
0

У меня возникла проблема с 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> 

Я хочу сделать массив или выбрать список со всем названием тега, например, страны. У меня есть следующий код:

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() 
        }; 
     } 

Как решить эту проблему? Есть идеи?

+0

OK. Что не работает в вашем коде? Любое исключение? Какая ошибка? Где? Неожиданные результаты? Какие? BTW IMO несколько дополнительных {} поможет читаемости много ... –

+0

Я хочу получить всю ценность с тегом страны, и я не знаю, как – egor

+0

Я смотрю здесь крутые парни, которые сидят в текущем минусовате, возможно, не имеют, но чтобы помочь – egor

ответ

1

Вот моя идея, но вы должны создать список «имена» раньше. Попробуйте LINQ к 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); 
    (...) 
} 
+0

ок спасибо и как попасть в один элемент страны и имени и региона? – egor

+0

Я думаю, что вы можете добавить еще список, чтобы контролировать это. Или создайте город объекта с этими атрибутами и в разборе insesrt в атрибутах, имена которых – Sowiarz

0

«Я хочу сделать массив или список выбора со всем именем тега например страну.»

«Я хочу, чтобы получить все значения с тегом страны, и я не знаю, как»

Вы можете попробовать использовать 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(); 
Смежные вопросы