如何抓取第二个媒体:此xm文件中的缩略图节点?

时间:2013-04-28 03:13:42

标签: c# xml

我有一个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();

此代码为我提供了随机缩略图,有时它会给我第一个,有时也会给我第二个。我总是想要最后一个缩略图。任何帮助表示赞赏。

1 个答案:

答案 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扩展方法来获取第二个。