我有下面的简单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等组合,但没有任何作用?
我从来没有得到任何订单
这应该很简单!我错过了什么?这可能是非常明显的事情!
答案 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
}