1

RSS フィードをカスタム フィールド項目 (たとえば、画像の URL (http://linktoimage) など) で拡張しました。

RSSフィードを次のように読んでいます:

    SyndicationFeed feed = await client.RetrieveFeedAsync(new Uri(feedUrl));

しかし、新しい要素を読み取るためには、SyndicationFeed を項目で拡張する必要があります (既定の RSS 項目の 1 つが必要です)。これを行う方法の最近の例は見つかりませんでした。利用可能なほとんどのコードは、Win8 アプリに適用できませんでした。私が見つけた最も近いものは次のとおりです。

    i.ElementExtensions.First(element => element.NodeName == "imgurl").NodeValue); 

しかし、これにより例外エラーが発生しました。要素の値を見ると、値の代わりに公開されたタグが表示されます。最初の imgurl タグを見つけて、その値を返すことを期待していました。コードを見つけたコードと同じように ( http://code.msdn.microsoft.com/windowsapps/XAML-Twitter-Client-e343d336 )

「SyndidationFeed」を使用しているときに、フィードに (文字列として) 追加した余分な xml タグを読み取るにはどうすればよいですか?

4

1 に答える 1

0

これを行う最善の方法は、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"))
                   };

このようにして、必要なすべての属性またはタグを取得できます。たとえば、タグを渡して画像ソースのみを返す関数をそれらに割り当てることもできます。

于 2013-01-16T21:44:11.720 に答える