[英]Extend rss feed and read items from SyndicationFeed for Win8 app
我已经使用自定义字段项目扩展了RSS feed,例如,使用图片网址(http:// linktoimage
我正在阅读RSS提要:
SyndicationFeed feed = await client.RetrieveFeedAsync(new Uri(feedUrl));
但是,为了阅读新元素,我需要使用项目扩展SyndicationFeed(它需要一小部分默认RSS项)。 我找不到如何执行此操作的最新示例。 大多数可用的代码无法添加到Win8应用程序。 我发现的最接近的是:
i.ElementExtensions.First(element => element.NodeName == "imgurl").NodeValue);
但这导致异常错误。 当查看元素的值时,它向我显示了已发布的标签而不是值。 我希望它找到第一个imgurl标签并返回它的值。 就像在我找到代码的代码中所做的一样( http://code.msdn.microsoft.com/windowsapps/XAML-Twitter-Client-e343d336 )
使用“ SyndidationFeed”时,如何读取和添加到供稿(作为字符串)的额外xml标签?
最好的方法是使用LINQ。 例如,阅读WordPress RSS(请注意注释):
XmlDocument xDoc = await XmlDocument.LoadFromUriAsync(new Uri(blog.URL)); //URL you're trying to read
StringReader stringReader= new StringReader(xDoc.GetXml());
XmlReader xmlReader = XmlReader.Create(stringReader);
XDocument loadedPosts = XDocument.Load(xmlReader); //this can be done simpler using HttpClient.GetStringAsync
XNamespace dc = "http://purl.org/dc/elements/1.1/";
XNamespace content = XNamespace.Get("http://purl.org/rss/1.0/modules/content/"); //declare namespaces for dc:content
var data = from query in loadedPosts.Descendants("item") //gets all the "item" tags
select new Post //class you must create
{
NombreBlog = (string)query.Parent.Element("title"), //then you simply change 'Element("title")' with 'Element("propertyYouWant")'
Titulo = (string)query.Element("title"),
Autor = (string)query.Element(dc + "creator"),
Contenido = (string)query.Element(content + "encoded"),
PubDate = (string)query.Element("pubDate"),
Link = (string)query.Element("link"),
ID = getId((string)query.Element("guid")),
Imagen = getImage((string)query.Element(content + "encoded"))
};
通过这种方式,您可以获得所需的所有属性或标签,甚至可以通过传递标签并仅返回图像源的方式为它们分配功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.