Xml 需要根据属性的值读取XDocument中的值

Xml 需要根据属性的值读取XDocument中的值,xml,c#-4.0,linq-to-xml,Xml,C# 4.0,Linq To Xml,我有一个如下所示的xml文档: <RESPONSES> <RESPONSE STATUS="OK"> <ALBUM> <URL TYPE="COVERART" SIZE="THUMBNAIL">http://akamai-b.cdn.cddbp.net/cds/2.0/cover/60AA/2DF9/B94B/72C8_thumbnail_front.jpg</URL>

我有一个如下所示的xml文档:

<RESPONSES>
    <RESPONSE STATUS="OK">
        <ALBUM>
           <URL TYPE="COVERART" SIZE="THUMBNAIL">http://akamai-b.cdn.cddbp.net/cds/2.0/cover/60AA/2DF9/B94B/72C8_thumbnail_front.jpg</URL>
           <URL TYPE="ARTIST_BIOGRAPHY">http://web.content.cddbp.net/cds/2.0?id=6F64C8E01EA6253B&amp;client=10395648&amp;class=biography&amp;type=text/plain&amp;tag=02sq63myXqi8O9GLtyVrTB2Q0HTdtZEIU0LuGDlIoDRvQGTE2lkKnsdQ</URL>
        </ALBUM>
    </RESPONSE>
<RESPONSES>

两个都没有给我我想要的。有人能帮帮我吗

您需要找到具有名为type的属性的元素,该属性的值为“covertart”或“artist_传记”。您需要一个谓词:

List<Album> albums = xDoc
    .Root
    .Descendants("ALBUM")
    .Select(e =>
        new Album()
        {
            CoverArt = e
                .Elements("URL")
                .First(u => u.Attribute("TYPE").Value == "COVERART")
                .Value
                .ToString(),
            ArtistBio = e
                .Elements("URL")
                .First(u => u.Attribute("TYPE").Value == "ARTIST_BIOGRAPHY")
                .Value
                .ToString()
        }
    ).ToList();
List相册=xDoc
.根
.后代(“专辑”)
.选择(e=>
新专辑()
{
覆盖率=e
.元素(“URL”)
.First(u=>u.Attribute(“TYPE”).Value==“COVERART”)
价值
.ToString(),
ArtistBio=e
.元素(“URL”)
.First(u=>u.Attribute(“TYPE”).Value==“艺术家传记”)
价值
.ToString()
}
).ToList();

注意:我通常将内部语句放在一行上,但为了便于阅读,这里进行了扩展。

谢谢David。这适用于coverart,但对于bio,I get{“序列不包含匹配元素”}System.Exception{System.InvalidOperationException},我知道结果集中实际上有一个bio。我用您提供的小xml片段测试了这一点,它对我有效。你能再检查一下你发布的xml是否正确吗?谢谢David-问题出在我这边-是我提供给web服务的xml有缺陷。谢谢你在这方面的帮助。
                   CoverArt = (string)item.Element("URL").Attribute("COVERART")
               }).ToList();
List<Album> albums = xDoc
    .Root
    .Descendants("ALBUM")
    .Select(e =>
        new Album()
        {
            CoverArt = e
                .Elements("URL")
                .First(u => u.Attribute("TYPE").Value == "COVERART")
                .Value
                .ToString(),
            ArtistBio = e
                .Elements("URL")
                .First(u => u.Attribute("TYPE").Value == "ARTIST_BIOGRAPHY")
                .Value
                .ToString()
        }
    ).ToList();