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

标签 c# xml linq linq-to-xml

我有这个 XML 结构:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
  <Document>
    <name>My Work</name>
    <Placemark>
      <name>Main Building</name>
      <Polygon>
        <extrude>1</extrude>
        <altitudeMode>relativeToGround</altitudeMode>
        <outerBoundaryIs>
          <LinearRing>
            <coordinates>
            </coordinates>
          </LinearRing>
        </outerBoundaryIs>
      </Polygon>
    </Placemark>

    <Placemark>
      <name>Office 1</name>
      <Polygon>
        <extrude>1</extrude>
        <altitudeMode>relativeToGround</altitudeMode>
        <outerBoundaryIs>
          <LinearRing>
            <coordinates>
            </coordinates>
          </LinearRing>
        </outerBoundaryIs>
      </Polygon>
    </Placemark>
  </Document>
</kml>

这继续......

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

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<Building> 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 中声明的 namespace :

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

关于c# - 使用 LINQ 从 XML 文件中选择元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14501196/

相关文章:

c# - 如何在c#中执行命令?

java - 如何确认文件是XML格式?

c# - 此 XAML 代码中的 IsEmpty 引用/成员在哪里?

c# - MVC3 Unobtrusive Validation 在 Ajax 调用后不起作用

php - 使用 XMLReader 和 PHP 获取 XML 属性

c# - 使用 linq 避免嵌套循环

c# - 如何防止被零除?

c# - 组合 2 个 linq 操作

C# MySQLDataReader.AffectedRows = -1

java - 如何将字符串对象(包含 XML) 'transform' 指向现有 JSP 页面上的元素