为什么这个XML代码不能创建对象?

时间:2016-01-25 12:55:03

标签: xml c#-4.0 xml-parsing linq-to-xml

我有下面的简单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();

我尝试了很多不同的Desecendants,Elements等组合,但没有任何作用?

我从来没有得到任何订单

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

1 个答案:

答案 0 :(得分:0)

您无法读取这些元素的原因是您需要支持xml命名空间:

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

你也可以做一个快速的肮脏黑客&#34;通过检查元素的.LocalName(它等于&#34; GV8APIDATA&#34;而不是包含命名空间的完全限定元素名称)。

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

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