【问题标题】:LINQ to XML via C#通过 C# 的 LINQ to XML
【发布时间】:2010-12-27 12:31:11
【问题描述】:

我是 LINQ 的新手。我明白它的目的。但我无法完全弄清楚。我有一个如下所示的 XML 集:

<Results>
  <Result>
    <ID>1</ID>
    <Name>John Smith</Name>
    <EmailAddress>john@example.com</EmailAddress>
  </Result>
  <Result>
    <ID>2</ID>
    <Name>Bill Young</Name>
    <EmailAddress>bill@example.com</EmailAddress>
  </Result>
</Results>

我已经将此 XML 加载到 XDocument 中:

string xmlText = GetXML();
XDocument xml = XDocument.Parse(xmlText);

现在,我正在尝试将结果转换为 POCO 格式。为了做到这一点,我目前正在使用:

var objects = from results in xml.Descendants("Results")
              select new Results
              // I'm stuck

如何通过 LINQ 获取 Result 元素的集合?我对在我的代码中导航 XML 结构感到特别困惑。

谢谢!

【问题讨论】:

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


    【解决方案1】:

    这将返回一个匿名类的IEnumerable

    var q = from result in xml.Descendants
            select new
            {
                ID = result.Descendants("ID"),
                Name= result.Descendants("Name"),
                EmailAddress= result.Descendants("EmailAddress")
            };
    

    或者如果你定义了类`Result,例如:

    class Result
    {
        public ID { get; set; }
        public Name { get; set; }
        public EmailAddress { get; set; }
    }
    

    然后:

    var q = from result in xml.Descendants
            select new Result
            {
                ID = result.Descendants("ID"),
                Name = result.Descendants("Name"),
                EmailAddress = result.Descendants("EmailAddress")
            };
    

    (返回IEnumerable&lt;Result&gt;

    【讨论】:

    • @user70192:很高兴它有帮助! :)
    【解决方案2】:

    如果您的 Results 子元素只是 Result 元素,那么您可以这样获取它们:

    var objects = from result in xml.Descendants
                  select result;
    

    但在这种幸运的情况下,您可以只使用 xml.Descendants。

    如果不只是 Result 元素,那么这样就可以了:

    var object = from result in xml.Descendants
                 where result.Name == "Result"
                 select result;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-22
      相关资源
      最近更新 更多