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