通过C#LINQ to XML

时间:2010-12-27 12:31:12

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

我是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结构感到特别困惑。

谢谢!

3 个答案:

答案 0 :(得分:3)

这将返回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<Result>

答案 1 :(得分:0)

如果您的结果子元素只是结果元素,那么您可以这样得到它们:

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;

答案 2 :(得分:0)

如果您是LINQ的新手,您还可以在this question

中找到非常有用的链接