2012-11-30 34 views
0

我有这个XML文件:如何在C#中使用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(); 

问题是,它引发了对.Select部分System.NullReferenceException: Object reference not set to an instance of an object.错误(也许是因为它无法找到该值?)。

我想遍历XML并获取<Artist><Genre>标签中的相关部分。

回答

7

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

+0

就是这样,谢谢! – swiftcode

2

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

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