Во-первых, я не могу поверить, что кто-то в 2011 году все еще использует RSS 1.0, думаю, вы действительно узнаете что-то новое. Что ж, я пытаюсь разобрать их фид и разместить контент на моем клиентском сайте (я получил разрешения, поэтому здесь нет нарушений закона). Как вы можете себе представить, моя первая попытка с треском провалилась (был написан код для 2.0), поэтому я вернулся к чертежной доске и вот что я придумал.
RssController
public virtual ActionResult Index()
{
List<RssFeedItem> rssList = new List<RssFeedItem>();
XmlDocument doc = new XmlDocument();
XmlNamespaceManager manager = new XmlNamespaceManager(doc.NameTable);
manager.AddNamespace("rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#");
manager.AddNamespace("rss", "http://purl.org/rss/1.0/");
XmlTextReader reader = new XmlTextReader("http://wdfw.wa.gov/news/newsrss.php");
doc.Load(reader);
XmlNodeList nodes = doc.SelectNodes("/rdf:RDF//rss:item",manager);
foreach(XmlNode node in nodes)
{
XmlNodeList aboutNode = node.SelectNodes("rss:about", manager);
XmlNodeList titleNode = node.SelectNodes("rss:title", manager);
XmlNodeList linkNode = node.SelectNodes("rss:link", manager);
var item = new RssFeedItem
{
Link = linkNode.Count == 0 ? "" : linkNode[0].InnerText,
Title = titleNode.Count == 0 ? "" : titleNode[0].InnerText,
About = aboutNode.Count == 0 ? "" : aboutNode[0].InnerText
};
rssList.Add(item);
}
return View(rssList);
}
Я пытаюсь сделать это, используя частичное представление (ascs), и это выглядит так
index.aspx
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<GodsCreationTaxidermy.Models.RssFeedItem>" %>
<%
foreach (RssFeedItem item in (IEnumerable<RssFeedItem>)ViewData.Model)
{
Response.Write(string.Format("<div id={0}><a href={1} target=\"_blank\" /> <strong>{2}</strong></div>",
Model.About.Truncate(5), Model.Link, Model.Title.Truncate(25)));
} %>
Затем я пытаюсь использовать RenderPartial в mySite.Master
.
<% Html.RenderPartial("Index");%>
Проблема в том, что сайт никогда даже не загружается или даже выдает какую-то ошибку, он просто вращается, когда вращается значок загрузки FF.
EDIT
Ну, я сделал несколько существенных изменений в своем коде из предыдущего, и тот же результат, без ошибок, и он даже не загружает сайт (просто сидит и вращается). Вот код из контроллера
[MoveFormsScript]
[CanonicalUrlAttribute("Rss")]
public virtual ActionResult Index()
{
return View(new RssList());
}
Теперь код из RssList
[UIHint("Feeds")]
public SelectList Feeds { get; private set; }
[Required(ErrorMessage = "Rss Feeduired")]
public string Feed { get; set; }
public RssList()
{
this.Feeds = GetRssFeed(null);
}
public SelectList GetRssFeed(string selectedValue)
{
List<RssFeedItem> rssList = new List<RssFeedItem>();
XmlDocument doc = new XmlDocument();
XmlNamespaceManager manager = new XmlNamespaceManager(doc.NameTable);
manager.AddNamespace("rdf", "http://www.w3.org/1 999/02/22-rdf-syntax-ns#");
manager.AddNamespace("rss", "http://purl.org/rss/1.0/");
XmlTextReader reader = new XmlTextReader("http://wdfw.wa.gov/news/newsrss.php");
doc.Load(reader);
XmlNodeList nodes = doc.SelectNodes("/rdf:RDF//rss:item", manager);
foreach (XmlNode node in nodes)
{
XmlNodeList aboutNode = node.SelectNodes("rss:about", manager);
XmlNodeList titleNode = node.SelectNodes("rss:title", manager);
XmlNodeList linkNode = node.SelectNodes("rss:link", manager);
var item = new RssFeedItem
{
Link = linkNode.Count == 0 ? "" : linkNode[0].InnerText,
Title = titleNode.Count == 0 ? "" : titleNode[0].InnerText,
About = aboutNode.Count == 0 ? "" : aboutNode[0].InnerText
};
rssList.Add(item);
}
return new SelectList(rssList, "Link", "Title", selectedValue);
}
И, наконец, мой частичный взгляд
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<GodsCreationTaxidermy.Helpers.BusinessDTO.RssList>" %>
<%
foreach (var item in (IEnumerable<RssList>)ViewData.Model)
{
Response.Write(string.Format("<div id=\"{0}\"><a href=\"{1}\" target=\"_blank\" /> <strong>{2}</strong></div>",
item.Feed[0].ToString().Truncate(10), item.Feed[1], item.Feed[2].ToString().Truncate(100)));
} %>
Кто-нибудь может мне помочь?