首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用System.ServiceModel.Syndication从RSS提要中读取"dc:creator“元素

如何使用System.ServiceModel.Syndication从RSS提要中读取"dc:creator“元素
EN

Stack Overflow用户
提问于 2010-04-01 16:55:09
回答 1查看 3.7K关注 0票数 2

场景

我正在使用一个RSS提要,在某种程度上,它看起来像这样:

代码语言:javascript
复制
<item>
    <title>Blog Title Here</title>
    <link>http://blogurl.com/2010/03/23/title/</link>
    <comments>http://blogurl.com/2010/03/23/title/#comments</comments>
    <pubDate>Tue, 23 Mar 2010 10:44:54 +0000</pubDate>
    <dc:creator>AuthorName</dc:creator>
    <category><![CDATA[CategoryName]]></category>
    <guid isPermaLink="false">http://blogurl.com/?p=102</guid>
    <description><![CDATA[Description of post content]]></description>
    <content:encoded><![CDATA[Full blog post here]]></content:encoded>
</item>

我使用Rss20FeedFormatter获取SyndicationItems列表,如下所示:

代码语言:javascript
复制
List<SyndicationItem> items;
using (var reader = XmlReader.Create("http://blogurl.com/feed/"))
{
  var formatter = new Rss20FeedFormatter();
  formatter.ReadFrom(reader);
  items = formatter.Feed.Items.ToList();
}

问题

我不知道如何访问值dc:元素。我相信我需要以某种方式使用ElementExtensions,但是我不确定语法,而且在任何地方都找不到示例。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-04-01 17:22:49

下面是一个简短的F#示例,希望能引导您找到一些有用的API:

代码语言:javascript
复制
let xml = @"
<rss version=""2.0"">
<channel xmlns:dc=""http://whatever.it.is/"" xmlns:content=""http://that.too/"">
<title>testing</title>
<item> 
    <title>Blog Title Here</title> 
    <link>http://blogurl.com/2010/03/23/title/</link> 
    <comments>http://blogurl.com/2010/03/23/title/#comments</comments> 
    <pubDate>Tue, 23 Mar 2010 10:44:54 +0000</pubDate> 
    <dc:creator>AuthorName</dc:creator> 
    <category><![CDATA[CategoryName]]></category> 
    <guid isPermaLink=""false"">http://blogurl.com/?p=102</guid> 
    <description><![CDATA[Description of post content]]></description> 
    <content:encoded><![CDATA[Full blog post here]]></content:encoded> 
</item> 
</channel>
</rss>
"

open System.Xml 
open System.IO
open System.ServiceModel.Syndication
let ReadIt() =
    use reader = XmlReader.Create(new StringReader(xml))
    let formatter = new Rss20FeedFormatter()
    formatter.ReadFrom(reader)
    let items = formatter.Feed.Items
    for item in items do
        // if I know there are dc:creator elements (that can deserialize with DataContract of type 'string')
        let dcCreators = item.ElementExtensions.ReadElementExtensions<string>("creator","http://whatever.it.is/")
        for dcc in dcCreators do
            printfn "dcc : %s" dcc
        // if just probing around
        for ee in item.ElementExtensions do
            printfn "extension `%s:%s'" ee.OuterNamespace ee.OuterName 
            use eer = ee.GetReader()
            let inner = eer.ReadInnerXml()
            printfn "    %s" inner
ReadIt()
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2562120

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档