为什么这段 XML 代码没有创建对象?

Why does this XML code not create objects?

下面有简单的XML

<?xml version="1.0"?>
    <GV8APIDATA xmlns="gv8api-trayport-com">
        <ORDER Action="Query" />
    </GV8APIDATA>

然后我使用这段代码来解析 XML

var xml = XDocument.Load(@"C:\data\data.xml");

var orders =
    (from order in xml.Root.Elements("GV8APIDATA").Elements("ORDER")
        select new Order
        {
            Action = order.Attribute("Action").Value
        }).ToList();

我尝试了很多后代、元素等的不同组合,但没有任何效果?

我从来没有收到任何订单

这个应该很简单吧!我错过了什么?这可能是非常明显的事情!

您无法像那样读取元素的原因是因为您需要支持 xml 个名称空间:

public static XNamespace ns = "gv8api-trayport-com";
var dataElements = document.Elements(ns + "GV8APIDATA");

您还可以通过检查元素的 .LocalName(等于 "GV8APIDATA" 而不是包括命名空间的完全限定元素名称)来执行 "quick'n'dirty hack"。

我也认为如果你想掌握一个特定的值,最好在这里使用XPath(但请注意,你可能还需要在这里设置命名空间)。

var document = XDocument.Parse("your xml input");
var elements = document.XPathSelectElements("//GV8APIDATA/ORDER");
foreach (var element in elements)
{
    // read attribute here
}