- HTML ---> RSS源码,要求解析XML文件,它有是RSS格式的,建议使用tinyXml2解析RSS文件,故要学习tinyXml2,它在github上面。
- 解析 XML 文件,解析 json 数据,是必备技能。
- 在解析xml 文件时,要求提取出标题、链接、content、并且删除文章中的标记语言 ----> 这就需要字符串匹配和处理,(一般的自己写的字符串处理太繁琐,故要求利用正则表达式进行字符串匹配)
- 虽然在std :: 标准库里面也有Regular expressions library 可以处理字符串问题,但是它是源于boost C++库的,(boost 库也是值得我们去学习的),在这里建议使用,boost库里面的regex的一个regex_replace()这个函数处理。其中boost库是需要在Linux中进行安装的(这里采取离线安装)
- RSS文件解析问题解决思路: xml --> rss --> tinyxml2 --> Boost.Regex
tinyXml2 -- https://github.com/leethomason/tinyxml2
rss --- http://www.runoob.com/rss/rss-tutorial.html
- 3. Boost.Regex的使用
Boost.Regex是Boost中的正则表达式库,它是由John Maddock提供的,
它的文档在:
http://www.boost.org/doc/libs/1_62_0/libs/regex/doc/html/index.html
6、RSS基本语法、及扩展学习
1、RSS简介
- RSS 用于在网站间分享信息。需要对下面的知识有基本的了解:HTML / XHTML、XML / XML 命名空间有所了解。
- RSS 被设计用来展示选定的数据。
- 如果没有 RSS,用户就不得不每日都来您的网站检查新的内容。对许多用户来说这样太费时了。通过 RSS feed(RSS 通常被称为 News feed 或 RSS feed),用户们可以使用 RSS 聚合器来更快地检查您的网站更新。
2、RSS基本语法
简单的 RSS 文档:
<?xml version="1.0" encoding="UTF-8" ?><rss version="2.0">
<channel>
<title>菜鸟教程首页</title>
<link>http://www.runoob.com</link>
<description>免费编程教程</description>
<item>
<title>RSS 教程</title>
<link>http://www.runoob.com/rss</link>
<description>菜鸟教程 Rss 教程</description>
</item>
<item>
<title>XML 教程</title>
<link>http://www.runoob.com/xml</link>
<description>菜鸟教程 XML 教程</description>
</item>
</channel>
</rss>
说明:
文档中的第一行:XML 声明 - 定义了文档中使用的 XML 版本和字符编码。此例子遵守 1.0 规范,并使用 UTF-8 字符集(可支持中文)。
下一行是标识此文档是一个 RSS 文档的 RSS 声明(此例是 RSS version 2.0)。
下一行含有 <channel> 元素。此元素用于描述 RSS feed。
<channel> 元素有三个必需的子元素:
- <title> - 定义频道的标题。(比如 菜鸟教程首页)
- <link> - 定义到达频道的超链接。(比如 www.runoob.com)
- <description> - 描述此频道(比如 免费编程教程)
每个 <channel> 元素可拥有一个或多个 <item> 元素。
每个 <item> 元素可定义 RSS feed 中的一篇文章或 "story"。
<item> 元素拥有三个必需的子元素:
- <title> - 定义项目的标题。(比如 RSS 教程)
- <link> - 定义到达项目的超链接。(比如 http://www.runoob.com/rss)
- <description> - 描述此项目(比如 菜鸟教程 Rss 教程)
最后,后面的两行关闭 <channel> 和 <rss> 元素。
在 RSS 中书写注释的语法与 HTML 的语法类似:
<!-- 这是一个 RSS 注释 -->
3、RSS的注意事项
RSS 使用 XML 来编写
因为 RSS 也是 XML,请记住:
- 所有的元素必许拥有关闭标签
- 元素对大小写敏感
- 元素必需被正确地嵌套
- 属性值必须带引号
4、RSS <channel> 其他辅助元素
RSS <channel> 元素除了上述三个必备的元素外,还有如下一些较为重要的元素:
- <category> 元素
<category> 子元素用于为 feed 规定种类。
<category> 子元素使 RSS 聚合器基于类别对网站进行分组成为可能。
eg: <category>Web 开发</category>
- <copyright> 元素
<copyright> 子元素会告知有关版本资料的信息。
eg:
<copyright>2006 Refsnes Data as. All rights reserved.</copyright>
- <image> 元素
<image> 子元素可在聚合器提供某个 feed 时显示一幅图像。
<image> 有三个必需的子元素:
-
- <url> - 定义引用图像的 URL
- <title> - 定义图像无法被显示时显示的文本
- <link> - 定义到达提供此频道的网站的超链接
<image>
<url>http://www.runoob.com/images/logo.png</url>
<title>菜鸟教程</title>
<link>http://www.runoob.com</link>
</image>
- <language> 元素
<language> 子元素用于规定用来编写文档的语言。
<language> 元素使 RSS 聚合器基于语言来对网站进行分组成为可能。
eg: <language>zh-cn</language>
5、RSS <item>其他辅助元素
除了三个必需的子元素:<title> <link> <description> 外,还有一些辅助元素:
- <comments> 元素
-
- <comments> 子元素允许把一个项目连接到有关此项目的注释。
- 注释可能这样的:
- <comments>http://www.runoob.com/comments</comments>
- <enclosure> 元素
<enclosure> 子元素允许将一个媒体文件导入一个项中。
<enclosure> 元素有三个必需的属性:
-
- url - 定义指向此媒体文件的 URL
- length - 定义此媒体文件的长度(字节)
- type - 定义媒体文件的类型
- 被包含在项目中的媒体文件可能是这样的:
- <enclosure url="http://www.runoob.com/rss/rss.mp3"length="5000" type="audio/mpeg" />