2014-08-29 177 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

确定。你的代码中有什么不起作用?有什么异常?哪个错误?哪里?意外的结果?什么? BTW国际海事组织几个额外的{}将有助于可读性很多... – 2014-08-29 08:48:34

+0

我想获得与标记国家的所有价值,我不知道如何 – egor 2014-08-29 08:49:52

+0

我看这里很酷的家伙谁坐当前minusVat可能没有,但只能帮助 – egor 2014-08-29 08:52:49

回答

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"/> 

的东西创建只有名字是数量的标签? 不是U可以这样做:

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 2014-08-29 10:43:29

+0

我想你可以添加更多的列表来控制这个。或者使用该属性创建一个对象城市,并在名称属性中解析insesrt – Sowiarz 2014-08-29 10:48:29

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