在C#中使用LINQ和XML获取子元素

时间:2012-10-13 09:56:02

标签: c# xml linq kml

我刚开始在c#中使用linq查询,而且我很难获得所需的所有数据。

基本上我使用google earth kml文件作为我的xml文件。

结构看起来像这样。

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.2">
 <Document>
  <Placemark>
    <name>XXX</name>
    <description>XXX</description>
    <styleUrl>XXX</styleUrl>
    <Point>
       <coordinates>XXX</coordinates>
    </Point>
  </Placemark>
 </Document>
</kml>

使用我的代码,我可以获得第一级元素(名称,描述,样式),但无法获得我的语法,以获得Point中的坐标元素。谁能指出我正确的方向?我正在努力的线是Coord = p.Element(ns +“Point”)。元素(ns +“坐标”)。值,这应该是什么?

XNamespace ns = "http://earth.google.com/kml/2.2";

var placemarks = xdoc.Descendants(ns + "Placemark")
                     .Select(p => new
                          {
                               Name = p.Element(ns + "name").Value,
                               Desc = p.Element(ns + "description").Value,
                               Coord = p.Element(ns + "Point")
                                        .Element(ns + "coordinates").Value  
                          }).ToList();

1 个答案:

答案 0 :(得分:1)

  var placemarks = xdoc.Descendants(ns + "Placemark")
                            .Select(p => new
                            {
                                Name = p.Element(ns + "name").Value,
                                Desc = p.Element(ns + "description").Value,
                                Coord = p.Descendants(ns + "coordinates")
                                         .First().Value
                            })
                            .ToList();