【问题标题】:Best way to consume xml feed in asp.net MVC (c#)在 asp.net MVC (c#) 中使用 xml 提要的最佳方式
【发布时间】:2012-06-26 04:04:05
【问题描述】:

我有一个 MVC 网站,当您单击一个按钮时,它将使用 Get 方法从另一个网站获取 xml 数据。然后我需要在我的网页中显示此 XML 的一部分。

我目前的方法是将 XML 反序列化为对象,并将对象传递给 View,然后 View 将获取适当的数据。

我的问题是我的类与 XML 数据不完全匹配(它没有每个元素/属性/等)。数据太长,元素和属性太多,所以我不想把所有的东西都写到类中。由于数据中存在一些错误,我无法使用 XSD.exe 从 XML 数据创建类(尽管当我的网页正在读取 xml 数据时它工作正常)。

有没有更有效的方法?

在此链接中阅读 IXmlSerializable 可能会消失,尽管 cmets 也注意到它存在一些问题。看起来它可能非常复杂。 How to deserialize only part of an XML document in C#

非常感谢您的帮助。谢谢!

【问题讨论】:

  • 不能只用 XSLT 把 XML 转换成你想要的格式吗?

标签: c# xml asp.net-mvc-3 xmlserializer


【解决方案1】:

使用框架来使用 Atom 提要。请参阅以下内容:System.ServiceModel.Syndication 命名空间 - msdn.microsoft.com/en-us/library/system.servicemodel.syndication.aspx

【讨论】:

    【解决方案2】:

    不是直接将原子提要 xml 反序列化为对象,而是首先将 xml 加载到 XDocument 对象中,然后使用 XLinq 查询 XDocument 对象并创建需要传递给视图的必要 ViewModel。

    例如

    查看模型

    public class FeedViewModel
    {
       ..
       public FeedItem[] FeedItems { get; set; }
    }
    
    public class FeedItem
    {
       public string Title { get; set; }
       public string Description { get; set; }
       public DateTime Date { get; set; }
    }
    

    在你的行动中

    var feedDocument = XDocument.Load(feedUrl);
    
    var feedItems = feedDocument.Descendants("item")
        orderby DateTime.Parse(feed.Element("pubDate").Value) descending
        select new FeedItem
        {
          Title = feed.Element("title").Value,
          Description = feed.Element("description").Value,
          Date = DateTime.Parse(feed.Element("pubDate").Value)
        }.ToArray();
    
    return View(new FeedViewModel{ FeedItems = feedItems });
    

    http://deepumi.wordpress.com/2010/02/21/how-to-consume-an-atom-rss-feed-using-asp-net-c-with-linq/

    【讨论】:

      猜你喜欢
      • 2011-01-21
      • 2012-05-11
      • 2010-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 2010-11-26
      • 1970-01-01
      相关资源
      最近更新 更多