如何使用LINQ在C#中解析XML文件?

时间:2012-11-30 16:46:01

标签: c# asp.net xml asp.net-mvc linq

我有这个XML文件:

<?xml version="1.0" encoding="utf-8"?>
<NewSounds>
    <Artists>
      <Artist>Avril Lavigne</Artist>
      <Artist>Bob Marley</Artist>
      <Artist>Coldplay</Artist>
    </Artists>

  <Genres>
    <Genre>Rock</Genre>    
    <Genre>Jazz</Genre>
    <Genre>Metal</Genre>
  </Genres>
</NewSounds>

如何在LINQ中解析这个简单的XML文件?我对LINQ知之甚少,这就是我所拥有的:

var artists = xml.Descendants("Artists")
                    .Elements("Artist")
                    .Select(a => new Artist {
                        Name = a.Element("Artist").Value
                    }).ToArray();

问题是,它会在System.NullReferenceException: Object reference not set to an instance of an object.部分引发.Select错误(可能是因为找不到值?)。

我想遍历XML并抓取<Artist><Genre>标记内的相关部分。

2 个答案:

答案 0 :(得分:7)

a回调中的

Select()<Artist>元素。 a.Element("Artist")不是什么。

答案 1 :(得分:2)

将元素转换为字符串,而不是访问Value属性。在这种情况下,如果element为null,则不会出现异常:

var artists = xml.Descendants("Artists")
                    .Elements("Artist")
                    .Select(a => new Artist {
                        Name = (string)a.Element("Artist")
                    }).ToArray();