[英]XML data extracted across two classes
我有两个类和以下XML。 我不知道如何使用以下XML创建Director和Movie的对象。 我想使用Linq,但尝试过很多东西但不确定。
我想让所有导演对象都有他们的ID,我希望所有的电影对象都包含所有的字段。
public class Director
{
public int DirectorID;
public string Name;
}
public class Movie
{
public string DirectorID;
public string Genre;
public string Rating;
public string MovieName;
}
<?xml version="1.0" encoding="UTF-8"?>
<Movie xmlns="http://www.imdb.co.uk" CreationDate="2015-01-25T18:14:33" year="2012" NumberOfMovies="6">
<DirectorMovie>
<Director>
<Name>Ridley Scott</Name>
</Director>
<Movie>
<Genre>Horror</Genre>
<Rating>8.9</Rating>
<MovieName>Alien</MovieName>
</Movie>
<Movie>
<Genre>Sci-Fi</Genre>
<Rating>8.7</Rating>
<MovieName>Blade Runner</MovieName>
</Movie>
<Movie>
<Genre>Action</Genre>
<Rating>7.4</Rating>
<MovieName>Black Hawk Down</MovieName>
</Movie>
</DirectorMovie>
<DirectorMovie>
<Director>
<Name>James Cameron</Name>
</Director>
<Movie>
<Genre>Action</Genre>
<Rating>8.9</Rating>
<MovieName>Aliens</MovieName>
</Movie>
<Movie>
<Genre>Sci-Fi</Genre>
<Rating>8.5</Rating>
<MovieName>Avatar</MovieName>
</Movie>
<Movie>
<Genre>Action</Genre>
<Rating>8.8</Rating>
<MovieName>Prometheus</MovieName>
</Movie>
</DirectorMovie>
</Movie>
首先,在定义类时要小心。 现在,您已经创建了仅具有公共属性的类,这可能不是您想要的。 检查如何创建属性和自动实现的属性 。
然后,就解析而言,使用Linq to XML非常简单(代码尚未经过测试,并且远未完成,用作开始的东西):
var doc = XDocument.Parse(xmlData);
var movieElement = doc.Element("Movie")
.Elements("DirectorMovie")
.Elements("Movie")
.Select(x => new Movie{
DirectorId = GetDirectorIdFromName(x.Parent.Element("Director").Element("Name").Value),
Genre = x.Element("Genre").Value
});
我想,这会帮助你想要的东西 - 我认为id是自动生成的。
int iID = 1;
XNamespace xn = "http://www.imdb.co.uk";
// List of individual directors;
var list = xeDir.Descendants(xn + "DirectorMovie").Select(item => new Director()
{
DirectorID = iID++,
Name = item.Element(xn + "Director").Element(xn + "Name").Value
});
// Dictionary of directors name vs movies list.
var movList = xeDir.Descendants(xn + "DirectorMovie").
ToDictionary(dir => dir.Element(xn + "Director").Element(xn + "Name").Value,
dir => dir.Elements(xn + "Movie").
Select(mov => new Movie()
{
Genre = mov.Element(xn + "Genre").Value,
MovieName = mov.Element(xn + "MovieName").Value,
Rating = mov.Element(xn + "Rating").Value,
DirectorID = list.Where(item => item.Name == dir.Element(xn + "Director").Element(xn + "Name").Value).First().DirectorID.ToString()
})
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.