我正在检索包含多个项目的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;
如何分离结果?
答案 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();