当我没有 Google Reader Atom 架构时,如何使用 xml to linq?
我正在为 BlogEngine.Net 开发一个小部件。 我的小部件将获取一个人的共享项目原子提要并打印标题、网站网址、日期和原子网址。 为了完成这个任务,我已经开始使用Linq和XML。
问题就在这里。 Google Reader 使用的原子提要位于源元素中,该元素具有 gr:stream-id 属性。 显然,XName 不喜欢名称中包含冒号。 我必须走这条路,因为 Google 阅读器架构不存在。 如果我有这个模式,它就会解决我的问题。 我怎样才能获得架构?
下面是到目前为止我的代码的一小段:
protected void Page_Load(object sender, EventArgs e) {
//Replace userid with the unique session id in your Google Reader
//url (the numbers after the F)
getFeed("userid");
}
public class Post {
public String title { get; set; }
public DateTime published { get; set; }
public String postUrl { get; set; }
public String baseUrl { get; set; }
public String atomUrl { get; set; }
}
private void getFeed(String userID) {
String uri = "http://www.google.com/reader/public/atom/user%2F" + userID + "%2Fstate%2Fcom.google%2Fbroadcast";
XNamespace atomNS = "http://www.w3.org/2005/Atom";
//The Google Reader schema link does not exist :(
XNamespace grNS = "http://www.google.com/schemas/reader/atom/";
XDocument feed = XDocument.Load(uri);
var posts = from item in feed.Descendants(atomNS + "entry")
select new Post {
title = item.Element(atomNS + "title").Value,
published = DateTime.Parse(item.Element(atomNS + "published").Value),
postUrl = item.Element(atomNS + "link").Attribute("href").Value,
atomUrl = item.Element(atomNS + "source").Attribute(grNS + "href").Value
};
foreach (Post post in posts) {
output.InnerHtml += "Title: " + post.title + "<br />";
output.InnerHtml += "Published: " + post.published.ToString() + "<br />";
output.InnerHtml += "Post URL: " + post.postUrl + "<br />";
output.InnerHtml += "Atom URL: " + post.atomUrl + "<br />";
output.InnerHtml += "<br />";
}
}
如果在仍然使用 Linq 和 XML 的同时还有另一种方法来解决这个问题,请告诉我。 提前致谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我确实找到了获取 Atom feed url 的替代解决方案。 不过,我仍然更喜欢使用 Google Reader Atom Schema,因为这样可以提供有点清晰的代码。
在 Atom feed 中,有一个 id 元素,如下所示:
因此,我将以下内容添加到我的 Linq 代码中:
getUrl 如下所示:
该代码返回 http://www.domain.com/blog/rss.xml
此解决方案似乎围绕命名空间的使用运行,但它完成了工作。
I did find an alternative solution to getting the atom feed url. However, I would still prefer to use the Google Reader Atom Schema because that would provide a bit clear code.
In the atom feed, there is an id element, which looks like this:
So I added the following to my Linq code:
With getUrl looking like this:
That code return http://www.domain.com/blog/rss.xml
This solution seems to run around the use of namespaces, but it gets the job done.