1

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

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

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

有没有更有效的方法来做到这一点?

在此链接中阅读 IXmlSerializable 可能会消失,尽管评论也指出了它的一些问题。看起来它可能非常复杂。 如何在 C# 中仅反序列化 XML 文档的一部分

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

4

2 回答 2

0

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

于 2012-06-26T07:21:36.480 回答
0

不是直接将 atom feed xml 反序列化到对象中,而是首先将 xml 加载到XDocument对象中,然后XDocument使用 Xlinq 查询对象并创建需要传递给视图的必要 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/

于 2012-06-26T09:36:37.930 回答