我有一个MVC网站,当你点击一个按钮时,会使用Get方法从另一个网站获取xml数据。然后我需要在我的网页中显示部分XML。
我目前的方法是将XML反序列化为对象,并将对象传递给View,然后将获取适当的数据。
我的问题是我的类完全不匹配XML数据(它没有每个元素/属性/ etc)。数据太长,元素和属性太多,所以我不想把所有内容都写到类中。我无法使用XSD.exe从XML数据创建类,因为数据中存在一些错误(尽管xml数据在我的网页读取时工作正常)。
有更有效的方法吗?
请阅读此链接,IXmlSerializable可能会离开,尽管评论中也注意到了一些问题。看起来它可能很复杂。 How to deserialize only part of an XML document in C#
非常感谢您的帮助。谢谢!
答案 0 :(得分:0)
使用框架来使用Atom提要。请参阅以下内容:System.ServiceModel.Syndication namespace - msdn.microsoft.com/en-us/library/system.servicemodel.syndication.aspx
答案 1 :(得分:0)
不是直接将原子提要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/