读取RDF格式的RSS文件
左直拳
RSS目前据说有3种格式:0.9X,1.0,2.0。用得最多的是2.0。对于RSS2.0,没有什么难的,在C#里,采用
XmlDocument xml = new XmlDocument();
xml.LoadXml(xmlFile);
XmlNodeList nodes = xml.SelectNodes("/rss/channel/item");
就可以轻松获得里面的每一个节点。
但对于RDF格式(也许就是RSS1.0吧?RSS的定义很混乱,搞不清楚)就不行了。比如,现在有一个RSS,格式如下:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet title="XSL_formatting" type="text/xsl" href="/china/rss.xsl" ?>
<rdf:RDF xmlns:rdf="http://www.w3.org/<chsdate w:st="on" isrocdate="False" islunardate="False" day="22" month="2" year="1999">1999/02/22</chsdate>-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:cc="http://web.resource.org/cc/" xmlns="http://purl.org/rss/1.0/">
……
<item rdf:about="http://www.bbc.co.uk/go/wsy/pub/rss/1.0/-/china/learningenglish/takeawayenglish/tae/2007/01/070131_music_in_schools.shtml">
<title xml:lang="zh-Hans">Music in Schools 校园音乐课程</title>
<link>http://www.bbc.co.uk/go/wsy/pub/rss/1.0/-/china/learningenglish/takeawayenglish/tae/2007/01/070131_music_in_schools.shtml</link>
<description xml:lang="zh-Hans">Can you play a musical instrument? Learn all about British school music lessons in Take Away English. </description>
<dc:date><chsdate w:st="on" isrocdate="False" islunardate="False" day="31" month="1" year="2007">2007-01-31</chsdate>T17:30:57+00:00</dc:date>
<dc:format>text/plain</dc:format>
<dc:language>zh-Hans</dc:language>
<dc:publisher>http://www.bbcchina..com.cn</dc:publisher>
<dc:creator>http://www.bbc.co.uk/china</dc:creator>
<dc:type>Tae, Takeaway English</dc:type>
</item>
<item>……</item>
<item>……</item>
……
</rdf:RDF>
对于这种格式,表面上看,也是XML嘛,可直接用上面的方式去读取就是不行,一个节点也拿不到。
开始以为是什么XPath写得不对,一会儿xml.SelectNodes("//RDF/item")不行,一会儿xml.SelectNodes("//rdf:RDF/item")也不行。
后来才知道,要指定命名空间。
留意一下RSS文件中的代码
<rdf:RDF xmlns:rdf="http://www.w3.org/<chsdate w:st="on" isrocdate="False" islunardate="False" day="22" month="2" year="1999">1999/02/22</chsdate>-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:cc="http://web.resource.org/cc/" xmlns="http://purl.org/rss/1.0/">
两个红色部分分别表示两个不同的命名空间。其中第二个(xmlns="http://purl.org/rss/1.0/")没有前缀,说明它是默认命名空间,则其所有子孙节点没有指定前缀的,都使用该命名空间。比如,<item>就属于默认命名空间,<dc:date>就属于命名空间dc。
明白了这个道理,就可以写C#代码如下:
XmlNamespaceManager nsMgr = new XmlNamespaceManager(xml.NameTable);
nsMgr.AddNamespace("rdf", "http://www.w3.org/<chsdate w:st="on" isrocdate="False" islunardate="False" day="22" month="2" year="1999">1999/02/22</chsdate>-rdf-syntax-ns#");
nsMgr.AddNamespace("rss", "http://purl.org/rss/1.0/");
XmlNodeList nodes = xml.SelectNodes("/rdf:RDF/rss:item", nsMgr);
这样就可以获得节点<item>的集合了。
同理,要获得<Item>里面的子节点也应该要指定命名空间:
string link = nodes[i].SelectSingleNode("rss:link",nsMgr).InnerText
分享到:
相关推荐
RSS(Really Simple Syndication)和Atom都是用于发布和接收网站内容的格式,它们允许用户和其他站点自动获取更新的信息。RSS 1.0和RSS 2.0(通常称为RSS)是两种不同的标准,虽然它们用于相同的目的,但它们的开发...
标准的XML文件格式可确保与许多不同的机器/程序兼容。 RSS feed也使希望从喜爱的网站及时接收更新或从许多网站汇总数据的用户受益。 阅读更多(维基百科) 这是Java SE后端和Java Swing UI应用程序,它通过解析abc...
- `forEach`属性指定了要遍历的XPath路径,这里是RSS feed的`/RDF/channel`和`/RDF/item`。 - `transformer`如`DateFormatTransformer`可以对字段进行转换,例如将日期格式化。 - `<field>`元素定义了每个要索引的...
WebFeeds:用于 .NET 的统一 RSS/RDF/Atom 提要库允许常见提要格式的往返序列化和反序列化。 Atom 1.0/0.3、RSS 2.0 和 RSS 1.0 (RDF) 的完整对象模型以及用于生成提要的关联 IHttpAsyncHandler。 创建自定义提要就...
Maborak阅读器:(Ajax / Web RSS阅读器)这是一个开放源代码应用程序,能够读取本地和远程RSS,RDF,ATOM联合。 网站/演示:http://rss.maborak.com/(新闻阅读器,ajax rss阅读器,提要创建者)
YARFRAW 是一个开源 Java API 库,用于处理 RSS/RDF/ATOM 提要。 它以构建器样式提供统一的数据模型,以帮助开发人员构建和读取提要。 目前支持 RSS 0.9x、RSS 1.0、RSS 2.0 和 Atom 1.0/0.3
GtkSharpRSS支持RDF,意味着它可以处理更广泛的数据格式,不仅限于RSS。 5. **嵌入式Mozilla窗口**:GtkSharpRSS使用了Mozilla的嵌入技术,将Mozilla浏览器内核集成到应用中,以便在应用程序内部显示RSS feed的内容...
XHTML、WSDL、WAP/WML、RSS、RDF/OWL和SMIL等都是基于XML的子语言或扩展,它们分别用于增强HTML功能、定义Web服务接口、适应移动设备、发布新闻订阅、描述网络资源和构建多媒体内容。这些语言的出现进一步推动了Web...