MVC3 Razor で LINQ to XML(RSS、ATOM)


1つ前の例で、XML がRSSとATOM の場合は、WCFで追加された System.ServiceModel.Syndication を使用すると、もう少し簡単になることが、shiba-yanのヒントで分かった。

Modelの、class YahooRssModelがいらなくなり、

YahooRssController.cs を次のようにSyndicationFeed に入れて、Items をView に渡して帰してあげる。

using System.Web.Mvc;
using System.Xml;
using System.ServiceModel.Syndication;

namespace MvcApplication7.Controllers
{
    public class YahooRssController : Controller
    {

        public ActionResult Index()
        {
            //var res = new List<YahooRssModel>();

            ViewData[“Message”] = “ASP.NET MVC へようこそ”;

            string yahooRssUrl = “http://dailynews.yahoo.co.jp/fc/rss.xml”;

            XmlReader rdr = XmlReader.Create(yahooRssUrl);
            SyndicationFeed feed = SyndicationFeed.Load(rdr);

            return View(feed.Items);
        }
    }
}

Index.cshtml は、戦闘もモデルの定義を変更し、item 内のエレメントを表示してあげればよい。

@model IEnumerable<System.ServiceModel.Syndication.SyndicationItem>

@{
    ViewBag.Title = “Index”;
}

<h2>Index</h2>

<table>
    <tr>
        <th>
            title
        </th>
        <th>
            url
        </th>
        <th>
            Date
        </th>
    </tr>

@foreach (var item in Model) {
    <tr>
        <td>
            @item.Title.Text
        </td>
        <td>@if (item.Links.Count > 0)
            {
                @item.Links[0].Uri.AbsolutePath;
            }
        </td>
        <td>
            @item.PublishDate.ToLocalTime()
        </td>
    </tr>
}

</table>

結果はこんな感じ。

image

参考:

Razorの紹介 - ASP.NET向け新ビュー・エンジン - @IT

ASP.NET MVC 3 でも使えるフィード表示ヘルパーを作った 
RSS 2.0/ATOM 1.0フィードを処理するには?[3.5、C#、VB]

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中


%d人のブロガーが「いいね」をつけました。