我有一个xml列表,看起来像这样但有更多项目:
<item>
<title>Arrests over Dhaka building collapse</title>
<description>blabla.</description>
<link>http://url.com</link>
<pubDate>Sat, 27 Apr 2013 14:56:50 GMT</pubDate>
<media:thumbnail width="66" height="49" url="http://news.com/bla2.jpg" />
<media:thumbnail width="144" height="81" url="http://news.com/bla.jpg" />
</item>
正如你所看到我有2x媒体:缩略图我想总是抓住最后一个有144宽度和81高度而不是第一个。它是img url我想填充一个变量。
这是我的代码:
var url = "http://news.com";
XNamespace dcM = "http://search.yahoo.com/mrss/";
var xdoc = XDocument.Load(url);
var items = xdoc.Descendants("item")
.Select(item => new
{
Title = item.Element("title").Value,
Description = item.Element("description").Value,
Link = item.Element("link").Value,
PubDate = item.Element("pubDate").Value,
Myimage= (string)item.Element(dcM + "thumbnail").Attribute("url").Value
})
.ToList();
此代码为我提供了随机缩略图,有时它会给我第一个,有时也会给我第二个。我总是想要最后一个缩略图。任何帮助表示赞赏。
答案 0 :(得分:2)
您只需抓取具有您正在查找的属性的thumbnail
,即可在整个LINQ语句中选择您感兴趣的特定图像。我建议根据属性进行,如果有2个以上的图像,或者他们改变了顺序。
var items = xdoc.Descendants("item")
.Select(item => new
{
Title = item.Element("title").Value,
Description = item.Element("description").Value,
Link = item.Element("link").Value,
PubDate = item.Element("pubDate").Value,
MyImage = item.Elements("thumbnail").Where(i => i.Attribute("width").Value == "144" && i.Attribute("height").Value == "81").Select(i => i.Attribute("url").Value).SingleOrDefault()
})
.ToList();
这一行:
MyImage = item.Elements(dcM + "thumbnail")
.Where(i => i.Attribute("width").Value == "144" && i.Attribute("height").Value == "81")
.Select(i => i.Attribute("url").Value)
.SingleOrDefault()
将获取当前项目的所有thumbnail
元素,并选择宽度为144,高度为81的元素。
顺便说一下,Value
的{{1}}会返回一个字符串,因此您不需要投射它。
修改强>
如果您每次都想要第二个,并且您不关心属性是什么,您可以使用以下内容:
Attribute
使用MyImage = item.Elements(dcM + "thumbnail").Skip(1).Take(1).Select(i => i.Attribute("url").Value).SingleOrDefault()
和Skip
扩展方法来获取第二个。