With LinqToXml I would like to read out the album list for a given artist from an xml file like
<?xml version="1.0" encoding="utf-8" ?>
<artists>
<artist name="Beatles">
<albums>
<album title="Please Please Me" year="1963"/>
<album title="With the Beatles" year="1963"/>
...
</albums>
</artist>
...
I tried the following with LinqToXml. However, I would like to avoid instantiating an artist object...
XDocument xartists = XDocument.Load(FilePhysicalPath);
var artists = from xartist in xartists.Descendants("artist")
where xartist.Attribute("name").Value.Equals(id)
select new MusicArtist
{
Albums = from xalbum in xartist.Descendants("album")
select new MusicAlbum
{
Title = xalbum.Attribute("title").Value,
Year =
int.Parse(xalbum.Attribute("year").Value)
}
};
var artist = artists.SingleOrDefault();
if (artist != null)
return artist.Albums;
else
return null;
Update: My current 'best' attempt: See the accepted answer.