为什么这段 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
}
下面有简单的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
}