【问题标题】:Why does this XML code not create objects?为什么这个 XML 代码不创建对象?
【发布时间】:2016-05-01 19:07:42
【问题描述】:

我有下面的简单 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 c#-4.0 xml-parsing linq-to-xml


    【解决方案1】:

    之所以看不到这样的元素是因为你需要支持xml命名空间:

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

    您还可以通过检查元素的 .LocalName 来“快速破解”(它等于“GV8APIDATA”,而不是包含命名空间的完全限定元素名称)。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-04
      • 2012-01-27
      • 1970-01-01
      • 2019-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多