在XDocument中分离多个XML结果

时间:2014-01-08 01:15:54

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

我正在检索包含多个项目的xml文档,并且我希望能够查询XDocument以便我可以分离结果。例如,我正在运行此查询:“http://mymovieapi.com/?title=argo&type=xml&plot=simple&episode=1&limit=2&yg=0&mt=none&lang=en-US&offset=&aka=simple&release=simple&business=0&tech=0”。这是对IMDB电影数据库的查询,我正在寻找电影Argo。结果集看起来像下面的(删节)XML,它表明有两部电影名为argo:

<IMDBDocumentList>
  <item>
    <rated>R</rated>
    <actors>
      <item>Ben Affleck</item>
      <item>Bryan Cranston</item>
      <item>Alan Arkin</item>
    </actors>
    <title>Argo</title>
    <imdb_id>tt1024648</imdb_id>
  </item>
  <item>
    <actors>
      <item>Lajos Kovács</item>
      <item>Sándor Oszter</item>
    </actors>
    <title>Argo</title>
    <imdb_id>tt0297741</imdb_id>
  </item>
</IMDBDocumentList>

我想为每部电影分别检索演员,但是下面的代码会创建一个包含所有演员的“actorList”(对于这两部电影):

IEnumerable<XElement> actorList =
                from item in doc.Descendants("actors").Descendants()
                select item;

如何分离结果?

1 个答案:

答案 0 :(得分:0)

假设您有一个班级来保存这些信息(标题和演员名单):

public class Movie
{
    public string Title { get; set; }

    public List<string> Actors { get; set; }
}

您可以使用以下查询从XML轻松获取List<Movie>

var movies = (from item in doc.Root.Elements("item")
              select new Movie
              {
                  Title = (string)item.Element("title"),
                  Actors = (from a in item.Element("actors").Elements("item")
                            select (string)a).ToList()
              }).ToList();

如果你只关心演员,并且不需要这些标题,你可以只用演员名字获得List<List<string>>

var actors = (from item in doc.Root.Elements("item")
              select (from a in item.Element("actors").Elements("item")
                      select (string)a).ToList()).ToList();