0

大家好
我是 kendo mvc3 的新手,并试图将 Stackoverflow Rss 读作我的网格模型,但我做不到。当我使用 Yahoo RSS 时,我的项目工作但不能使用 Stackoverflow RSS

RSS 链接

https://stackoverflow.com/feeds http://news.yahoo.com/rss/

我的控制器功能

public static IEnumerable<Rss> GetRssFeed()
        {

            XDocument feedXml = XDocument.Load("https://stackoverflow.com/feeds");
            var feeds = from feed in feedXml.Descendants("entry")
                        select new Rss
                        {
                            Title = feed.Element("title").Value,
                            Link = "<a href="+feed.Element("id").Value+">Go To Page</a>",
                            Description = feed.Element("summary").Value
                        };
            return feeds;
        }

public ActionResult Index()
        {
            var model = GetRssFeed();
            return View(model);
        }

****我的部分视图****

@model IEnumerable<KendoUIMvcApplication1.Models.Rss>



<div data-role="page" data-title="Aravind's Partial View Test" data-add-back-btn="true" data-back-btn-text="Back">
    <div class="grid" style="margin-left: 5px;" id="grid">


@(Html.Kendo().Grid(Model)
    .Name("Grid")
    .Pageable()
    .Sortable()
    .Scrollable()
    .Columns(columns =>
    {
        columns.Bound(o => o.Title).Encoded(false);
        columns.Bound(o => o.Description).Encoded(false);
        columns.Bound(o => o.Link).Encoded(false);
    })
    .Filterable()
    .DataSource(dataSource => dataSource
        .Ajax()

    )
)

    </div>
</div>

**** 模型 ****

 public class Rss
        {
            public string Link { get; set; }
            public string Title { get; set; }
            public string Description { get; set; }
        }
4

1 回答 1

0

提要包含命名空间,因此在选择节点时,您需要包含这些命名空间:

XDocument feedXml = XDocument.Load("http://stackoverflow.com/feeds");
var feeds = from feed in feedXml.Descendants("{http://www.w3.org/2005/Atom}entry")
select new Rss
{
    Title = feed.Element("{http://www.w3.org/2005/Atom}title").Value,
    Link = "<a href=" + feed.Element("{http://www.w3.org/2005/Atom}id").Value + ">Go To Page</a>",
    Description = feed.Element("{http://www.w3.org/2005/Atom}summary").Value
};

您还可以将命名空间放在变量中:

XDocument feedXml = XDocument.Load("http://stackoverflow.com/feeds");
var ns = XNamespace.Get("http://www.w3.org/2005/Atom");
var feeds = from feed in feedXml.Descendants(ns + "entry")
select new
{
    Title = feed.Element(ns + "title").Value,
    Link = "<a href=" + feed.Element(ns + "id").Value + ">Go To Page</a>",
    Description = feed.Element(ns + "summary").Value
};

还要记住,在您提供的链接中,StackOverflow 使用 Atom,而 Yahoo 使用 RSS,这是两种不同的标准。您还提到您的代码适用于 Yahoo,这是极不可能的,因为在 RSS 中甚至没有一个名为<entry>.

于 2013-08-26T14:18:55.493 回答