使用LINQ从XML文件中选择元素

我有这个XML结构:

   My Work  Main Building  1 relativeToGround          Office 1  1 relativeToGround           

这继续……

我需要为每个建筑物选择建筑物“名称”并将其存储在列表中。 我写了这段代码:

 using System; using System.Linq; using System.Xml; using System.Xml.Linq; using System.Collections.Generic; namespace dsdsdsds { public class Building { public string BuildingName { get; set; } } class MainClass { public static void Main(string[] args) { List buildingNames = (from e in XDocument.Load("buildings.kml").Root .Elements("Document") select new Building { BuildingName = (string)e.Element("name") }).ToList(); foreach (var e in buildingNames) { Console.WriteLine(e); } } } } 

但是,它似乎不想输出任何东西,我无法找出我出错的地方。 谁能帮助我?

谢谢

您忘记了xml中声明的命名空间:

 var xdoc = XDocument.Load("buildings.kml"); XNamespace kml = "http://www.opengis.net/kml/2.2"; var buildings = xdoc.Root.Elements(kml + "Document") .Select(d => new Building { BuildingName = (string)d.Element(kml + "name") }).ToList(); 
 XDocument xDocument = XDocument.Load("buildings.kml"); XNamespace xNameSpace = "http://www.opengis.net/kml/2.2"; var names = from o in xDocument.Descendants(xNameSpace+"name") select o.Value; 

我认为这是最简单的方法; 不要忘记在查询元素之前添加命名空间。

从我所看到的,你试图循​​环“文档” – 元素并选择他们的名字。 相反,你可能想要更进一步,进入地标 – 元素,即。

 XDocument.Load("buildings.kml").Element("Document").Elements("Placemark") select new Building { BuildingName = e.Element("name").Value }).ToList();