1

我有一个看起来像这样但包含更多项目的 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 media:thumbnails 我想总是抓住最后一个宽度为 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();

这段代码给了我随机的缩略图,有时它给我第一个,有时给我第二个。我总是想要最后一个缩略图。任何帮助表示赞赏。

4

1 回答 1

2

您可以在整个 LINQ 语句中选择您感兴趣的特定图像,方法是仅抓取thumbnail具有您正在寻找的属性的图像。我建议根据属性进行,以防有超过 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 的元素。

顺便说一句,ValueofAttribute返回一个字符串,所以你不需要转换它。

编辑

如果您每次都想要第二个,并且您不在乎属性是什么,则可以使用以下内容:

MyImage = item.Elements(dcM + "thumbnail").Skip(1).Take(1).Select(i => i.Attribute("url").Value).SingleOrDefault()

它使用SkipandTake扩展方法来获取第二个。

于 2013-04-28T04:01:56.413 回答