第9节 在线共享内容的简易方式(RSS)
RSS消息在Internet上到处都可用,传播当地天气预报、搜索引擎结果、DVD的队列信息、DVD新版本、头条新闻和体育新闻等信息。RSS 消息源的理念就是以一种简单的标准格式传输动态的文本信息。
RSS起源于1999年,以一种简单,易懂的形式提供内容。RSS 消息源使用XML来描述数据,而不是使用 HTML来描述一个文件。一个RSS 消息源就是一个包含数据的简单的XML文件。这种在XML文件内传输数据的方法由RSS2.0规范所描述的,所有的RSS文件必须遵循XML1.0规范。RSS 消息源通常使用HTTP传输机制。
9.1 扩展标记语言(XML)
XML是一种用于描述和解析信息的语言,类似于C语言的结构体。将数据被组成要素,并加一个开始标签和一个结束标签。结束标签的名称必须与开始标签相同,并在其前加一个“/”。开始和结束标签的名称给出了该要素的类型。
XML 1.0规范参见:HTUhttp://www.w3.org/TR/REC-xml
9.1.1 标签(Tags)
下面就是一个标签例子:
<TITLE>Advanced ColdFire TCP/IP Clients</TITLE>
TITLE为元素类型,<TITLE>为开始标签,</TITLE>为结束标签。标签之间的就是数据。如同 C 语言的结构体,数据与类型有关。开始标签和结束标签间的数据即为元素内容。
元素还可以包含其他元素,这样提供了一种用单一名字组织不同类型数据的方法。同C结构体,通过一个路径来引用该特殊数据块。例如:
<APPNOTES>
<BYEG>
<AN3455>ColdFire HTTP server</AN3455>
<AN3470>ColdFire TCP/IP Stack</AN3470>
<AN3492>ColdFire USB Stack</AN3492>
</BYEG>
</APPNOTES>
9.1.2 特殊字符和转义序列
&、<和>是特殊的XML字符,定义了XML 标签和转义序列。转义序列用代码而不是单一的符号来表示一个字符,以“&”开始并以“;”结束。为了将这些字符作为元素的内容,需使用以下替换:
9.1.3 CDATA 部件
CDATA部件是XML规则的特例。在CDATA部件内部的所有内容都会被解析器忽略,允许在不转义的情况下就可以使用特殊字符。CDATA部件以字符串<!CDATA开始,并以字符串))>结束。在括号间的所有内容都会被 XML忽略。
例如:
<![CDATA[ character data here is ignored by XML parser ))>
<![CDATA[ <THIS_IS_NOT_A_TAG> < ]]>
因为 XML 解析器会忽略掉括号间的内容,所以标签和转义序列都将被忽略,并被解释为文本或字符数据。
9.1.4 在XML文件中找出文本或字符数据
由XML1.0规范可知,文件的字符数据由所有没有标记的文本组成。这就包括在CDATA 部件中括号间的所有内容和主体中不在<>括号间的所有内容。主体中的转义序列代表一个单一的字符数据。
为了将字符数据从XML文件中过滤出来,需先将所有的标签和<>括号去掉。然后,将转义序列转换为实际的字符。
9.1.5 XML文件样例
在下面的XML文件例子中,数据由描述这些数据的标签所封装组成一个C结构体。为了在XML文件中找到被描述的数据,可以用你想要的数据类型查找开始和结束标签。与该类型相关的数据就在这些标签之间。
来自:HTUhttp://www.weather.gov/data/current_obs/KUGN.xUUmUTTUl
<?xml version=1.0 encoding=ISO-8859-1 ?>
<current_observation version=1.0 xmlns:xsd=http://www.w3.org/2001/XMLSchema
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xsi:noNamespaceSchemaLocation=http://www.weather.gov/data/current
_obs/current_observation.xsd>
<credit>NOAA's National Weather Service</credit>
<credit_URL>http://weather.gov/</credit_URL>
<image>
<url>http://weather.gov/images/xml_logo.gif</url>
<title>NOAA's National Weather Service</title>
<link>http://weather.gov</link>
</image>
<suggested_pickup>15 minutes after the hour</suggested_pickup>
<suggested_pickup_period>60</suggested_pickup_period>
<location>Chicago / Waukegan, Waukegan Regional Airport, IL</location>
<station_id>KUGN</station_id>
<latitude>42.420</latitude>
<longitude>-87.870</longitude>
<observation_time>Last Updated on Jul 28, 10:52 am CDT</observation_time>
<observation_time_rfc822>Sat, 28 Jul 2007 10:52:00 -0500 CDT</observation_time_rfc822 >
<weather>Overcast</weather>
<temperature_string>73 F (23 C)</temperature_string>
<temp_f>73</temp_f>
<temp_c>23</temp_c>
<relative_humidity>81</relative_humidity>
<wind_string>From the Northeast at 13 Gusting to 21 MPH</wind_string>
<wind_dir>Northeast</wind_dir>
<wind_degrees>30</wind_degrees>
<wind_mph>12.65</wind_mph>
<wind_gust_mph>21</wind_gust_mph>
<pressure_string>29.98 (1014.1 mb)</pressure_string>
<pressure_mb>1014.1</pressure_mb>
<pressure_in>29.98</pressure_in>
<dewpoint_string>67 F (19 C)</dewpoint_string>
<dewpoint_f>67</dewpoint_f>
<dewpoint_c>19</dewpoint_c>
<heat_index_string>73 F (23 C)</heat_index_string>
<heat_index_f>73</heat_index_f>
<heat_index_c>23</heat_index_c>
<windchill_string>NA</windchill_string>
<windchill_f>NA</windchill_f>
<windchill_c>NA</windchill_c>
<visibility_mi>10.00</visibility_mi>
<icon_url_base>http://weather.gov/weather/images/fcicons/</icon_url_base>
<icon_url_name>ovc.jpg</icon_url_name>
<two_day_history_url>http://www.weather.gov/data/obhistory/KUGN.html</two_day_history_url>
<ob_url>http://www.nws.noaa.gov/data/METAR/KUGN.1.txt</ob_url>
<disclaimer_url>http://weather.gov/disclaimer.html</disclaimer_url>
<copyright_url>http://weather.gov/disclaimer.html</copyright_url>
<privacy_policy_url>http://weather.gov/notice.html</privacy_policy_url>
</current_observation>
9.1.6 XML文件存在的问题
XML文件的问题就是标签名的适应性问题。XML文件的创建者可以使用任何名字来描述数据。这样就需要有一种标准,对标签名以及类型是怎样与数据联系在一起等进行标准化。那种标准就是RSS标准。
9.2 RSS规范
RSS是XML的一种,它将HTML结构嵌入XML中。RSS也是定义一组元素,并用那些元素定义一个基本模块。RSS规范中定义了很多种元素,本文只关注那些与RSS应用有关的元素。
下面列出了一个典型的RSS文件:
<channel>
<title>The name of the channel</title>
<link>URL to the HTML website corresponding to this channel</link>
<description>Text describing the channel</description>
<item>
< title>Item1 Title</title>
<link>URL of item 1</link>
<description>Text for item 1</description>
</item>
<item>
<title>Item2 Title</title>
<link>URL of item 2</link>
<description>Text for item 2</description>
</item>
</channel>
将RSS文件的组织结构与报纸相比较。channel即为报纸的名称,item即为报纸的文章,title即为文章的标题,description即为文章的内容。
9.2.1 RSS文件样例
本样例的数据与上节XML文件相同。RSS标准定义了title和 description 标签名。这些标签名内包含了所要的数据。所有的RSS2.0 compliant feeds 都包含title和 description 这两个标签名。
来自:http://www.weather.gov/data/current_obs/KUGN.rss
<?xml version=1.0 encoding=ISO-8859-1 ?>
<rss version=2.0 xmlns:dc=http://purl.org/dc/elements/1.1/>
<channel>
<title>Weather at Chicago / Waukegan, Waukegan Regional Airport, IL - via NOAA's
National Weather Service</title>
<link>http://www.weather.gov/data/current_obs/</link>
<lastBuildDate>Sat, 28 Jul 2007 16:32:11 UT</lastBuildDate>
<ttl>60</ttl>
<description>Weather conditions from NOAA's National Weather Service.</description>
<language>en-us</language>
<managingEditor>robert.bunge@noaa.gov</managingEditor>
<webMaster>w-nws.webmaster@noaa.gov</webMaster>
<image>
<url>http://www.weather.gov/images/xml_logo.gif</url>
<title>NOAA - National Weather Service</title>
<link>http://www.weather.gov/data/current_obs/</link>
</image>
<item>
<title>Overcast and 73 degrees F at Chicago / Waukegan, Waukegan Regional Airport, IL</title>
<link>http://weather.noaa.gov/weather/current/KUGN.html</link>
<description>
<![CDATA[
<img src=http://weather.gov/weather/images/fcicons/ovc.jpg class=noaaWeatherIcon
width=55 height=58 alt=Overcast style=float:left; /><br />
))>
Winds are Northeast at 13 Gusting to 21 MPH. The pressure is 29.98 (1014.1 mb) and
the humidity is 81%. The heat index is 73. Last Updated on Jul 28, 10:52 am CDT.
</description>
<guid isPermaLink=false>Sat, 28 Jul 2007 10:52:00 -0500 CDT</guid>
</item>
</channel>
</rss>
9.3 RSS/XML字符数据过滤器
为了将字符数据(你真正需要的信息)从 RSS 流中提取出来,必须将所有的元文件(metatext)进行过滤。任何可以处理的HTML都必须先被翻译然后才能进行处理。 例如,<br>在 HTML 中表示新的一行,而在 RSS 流中则为“<br>”。过滤器必须将<br>正确翻译为回车换行。其他的被嵌入到字符数据中的 HTML 标签还包括段落标签<p>和图像标签<IMG>,分别对应 RSS流中的“<p>”、“<IMG…>”。段落标签被翻译为回车换行,如果被嵌入的系统不能处理图像,那么图像标签就会被忽略。
9.3.1 RSS/XML字符数据过滤器状态机
字符数据过滤器被??为一个有限状态机,只使用2个全局变量,1个状态变量和一个 FILO 队列。FILO 队列用于存储先前的字符。键入过滤器的每个字节数据从左边进入FILO,当前字符的位置为filo_buff[FILO_BUFF_SIZE-1]。FILO的缓冲大小由宏FILO_BUFF_SIZE设置,必须比可能的最大标签名还大。
#define FILO_BUFF_SIZE 32
状态:
STATE_ZERO
STATE_TAGSEARCH
STATE_INTAG
STATE_PRINT
STATE_SKIP
STATE_SKIP_NON_ASCII
STATE_SKIP_SPACE
STATE_CDATA
STATE_CDATA_PRINT
STATE_CDATA_SKIP_AMP
STATE_SKIP_INTAG
STATE_IN_AMPERSAND
全局变量:
unsigned char filo_buff[FILO_BUFF_SIZE);
unsigned char state;
unsigned char EMG_rss_text_filter(unsigned char data, unsigned char **tag_filter)

图12 字符过滤状态机
过滤器接收到一个XML或RSS流和一个标签表,仅输出被选中标签内的字符数据。标签表是一个指针数组,这些指针指向过滤器应该从中过滤出字符数据的标签字符串。
过滤器通常返回 0。当处理表中一个标签的>时,过滤器为该标签返回其在数组中的索引(之前已找到<)。例如,若在RSS或XML流中检测到一个<title>标签则过滤器返回0,若检测到<description>标签,则返回2。
Const unsigned char *tag_filter[] =
{
{(const unsigned char *)”title”},
{(const unsigned char *)”description”},
{(const unsigned char *)””}
};
tag_filter指针数组样例。

图13 字符数组过滤器使用方法
9.3.2 字符数据过滤器excercisor 的PC应用
PC应用可用于验证状态机。它将XML或RSS流作为一个文件打开,该流经过有限状态机后,输出结果到控制台。
// For testing read data from file, and send to filter
EMG_init_rss_text_filter;
for(; !feof(input_file);)
{
if ((length = fread(temp, 1, PACKET_SIZE, input_file))==0)
break;
if (ferror(input_file))
break;
for(i=0; i<length; i++)
{
ret = EMG_rss_text_filter(temp[i), (unsigned char **)tag_filter);
if(ret) // Print a new line after each tag
printf(\n);
}
}
利用9.2.1节的RSS流“RSS文件样例”,PC excercisor 输出的过滤结果如下:

图14 Kugn.rss Feed的过滤结果
9.3.3 修改wget指令
wget命令用HTTP协议从远程服务器获取文件。本应用将wget命令升级为可支持字符数据过滤器。语法为:
wget <tag1><tag2> url
<tag1>和<tag2>是可选的,前后必须用<>隔开。而且,标签之间不能有空格。通过下面的宏可以增加可接收的标签数:
#define TAG_FILTER_SIZE 3

图15 用wget读取为过滤的RSS

图16 用wget和过滤器解析XML标签

图17 使用wget和过滤器的RSS Feed(上面未过滤,下面已过滤)
RSS起源于1999年,以一种简单,易懂的形式提供内容。RSS 消息源使用XML来描述数据,而不是使用 HTML来描述一个文件。一个RSS 消息源就是一个包含数据的简单的XML文件。这种在XML文件内传输数据的方法由RSS2.0规范所描述的,所有的RSS文件必须遵循XML1.0规范。RSS 消息源通常使用HTTP传输机制。
9.1 扩展标记语言(XML)
XML是一种用于描述和解析信息的语言,类似于C语言的结构体。将数据被组成要素,并加一个开始标签和一个结束标签。结束标签的名称必须与开始标签相同,并在其前加一个“/”。开始和结束标签的名称给出了该要素的类型。
XML 1.0规范参见:HTUhttp://www.w3.org/TR/REC-xml
9.1.1 标签(Tags)
下面就是一个标签例子:
<TITLE>Advanced ColdFire TCP/IP Clients</TITLE>
TITLE为元素类型,<TITLE>为开始标签,</TITLE>为结束标签。标签之间的就是数据。如同 C 语言的结构体,数据与类型有关。开始标签和结束标签间的数据即为元素内容。
元素还可以包含其他元素,这样提供了一种用单一名字组织不同类型数据的方法。同C结构体,通过一个路径来引用该特殊数据块。例如:
<APPNOTES>
<BYEG>
<AN3455>ColdFire HTTP server</AN3455>
<AN3470>ColdFire TCP/IP Stack</AN3470>
<AN3492>ColdFire USB Stack</AN3492>
</BYEG>
</APPNOTES>
9.1.2 特殊字符和转义序列
&、<和>是特殊的XML字符,定义了XML 标签和转义序列。转义序列用代码而不是单一的符号来表示一个字符,以“&”开始并以“;”结束。为了将这些字符作为元素的内容,需使用以下替换:
表4 特殊字符


9.1.3 CDATA 部件
CDATA部件是XML规则的特例。在CDATA部件内部的所有内容都会被解析器忽略,允许在不转义的情况下就可以使用特殊字符。CDATA部件以字符串<!CDATA开始,并以字符串))>结束。在括号间的所有内容都会被 XML忽略。
例如:
<![CDATA[ character data here is ignored by XML parser ))>
<![CDATA[ <THIS_IS_NOT_A_TAG> < ]]>
因为 XML 解析器会忽略掉括号间的内容,所以标签和转义序列都将被忽略,并被解释为文本或字符数据。
9.1.4 在XML文件中找出文本或字符数据
由XML1.0规范可知,文件的字符数据由所有没有标记的文本组成。这就包括在CDATA 部件中括号间的所有内容和主体中不在<>括号间的所有内容。主体中的转义序列代表一个单一的字符数据。
为了将字符数据从XML文件中过滤出来,需先将所有的标签和<>括号去掉。然后,将转义序列转换为实际的字符。
9.1.5 XML文件样例
在下面的XML文件例子中,数据由描述这些数据的标签所封装组成一个C结构体。为了在XML文件中找到被描述的数据,可以用你想要的数据类型查找开始和结束标签。与该类型相关的数据就在这些标签之间。
来自:HTUhttp://www.weather.gov/data/current_obs/KUGN.xUUmUTTUl
<?xml version=1.0 encoding=ISO-8859-1 ?>
<current_observation version=1.0 xmlns:xsd=http://www.w3.org/2001/XMLSchema
xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance
xsi:noNamespaceSchemaLocation=http://www.weather.gov/data/current
_obs/current_observation.xsd>
<credit>NOAA's National Weather Service</credit>
<credit_URL>http://weather.gov/</credit_URL>
<image>
<url>http://weather.gov/images/xml_logo.gif</url>
<title>NOAA's National Weather Service</title>
<link>http://weather.gov</link>
</image>
<suggested_pickup>15 minutes after the hour</suggested_pickup>
<suggested_pickup_period>60</suggested_pickup_period>
<location>Chicago / Waukegan, Waukegan Regional Airport, IL</location>
<station_id>KUGN</station_id>
<latitude>42.420</latitude>
<longitude>-87.870</longitude>
<observation_time>Last Updated on Jul 28, 10:52 am CDT</observation_time>
<observation_time_rfc822>Sat, 28 Jul 2007 10:52:00 -0500 CDT</observation_time_rfc822 >
<weather>Overcast</weather>
<temperature_string>73 F (23 C)</temperature_string>
<temp_f>73</temp_f>
<temp_c>23</temp_c>
<relative_humidity>81</relative_humidity>
<wind_string>From the Northeast at 13 Gusting to 21 MPH</wind_string>
<wind_dir>Northeast</wind_dir>
<wind_degrees>30</wind_degrees>
<wind_mph>12.65</wind_mph>
<wind_gust_mph>21</wind_gust_mph>
<pressure_string>29.98 (1014.1 mb)</pressure_string>
<pressure_mb>1014.1</pressure_mb>
<pressure_in>29.98</pressure_in>
<dewpoint_string>67 F (19 C)</dewpoint_string>
<dewpoint_f>67</dewpoint_f>
<dewpoint_c>19</dewpoint_c>
<heat_index_string>73 F (23 C)</heat_index_string>
<heat_index_f>73</heat_index_f>
<heat_index_c>23</heat_index_c>
<windchill_string>NA</windchill_string>
<windchill_f>NA</windchill_f>
<windchill_c>NA</windchill_c>
<visibility_mi>10.00</visibility_mi>
<icon_url_base>http://weather.gov/weather/images/fcicons/</icon_url_base>
<icon_url_name>ovc.jpg</icon_url_name>
<two_day_history_url>http://www.weather.gov/data/obhistory/KUGN.html</two_day_history_url>
<ob_url>http://www.nws.noaa.gov/data/METAR/KUGN.1.txt</ob_url>
<disclaimer_url>http://weather.gov/disclaimer.html</disclaimer_url>
<copyright_url>http://weather.gov/disclaimer.html</copyright_url>
<privacy_policy_url>http://weather.gov/notice.html</privacy_policy_url>
</current_observation>
9.1.6 XML文件存在的问题
XML文件的问题就是标签名的适应性问题。XML文件的创建者可以使用任何名字来描述数据。这样就需要有一种标准,对标签名以及类型是怎样与数据联系在一起等进行标准化。那种标准就是RSS标准。
9.2 RSS规范
RSS是XML的一种,它将HTML结构嵌入XML中。RSS也是定义一组元素,并用那些元素定义一个基本模块。RSS规范中定义了很多种元素,本文只关注那些与RSS应用有关的元素。
下面列出了一个典型的RSS文件:
<channel>
<title>The name of the channel</title>
<link>URL to the HTML website corresponding to this channel</link>
<description>Text describing the channel</description>
<item>
< title>Item1 Title</title>
<link>URL of item 1</link>
<description>Text for item 1</description>
</item>
<item>
<title>Item2 Title</title>
<link>URL of item 2</link>
<description>Text for item 2</description>
</item>
</channel>
将RSS文件的组织结构与报纸相比较。channel即为报纸的名称,item即为报纸的文章,title即为文章的标题,description即为文章的内容。
9.2.1 RSS文件样例
本样例的数据与上节XML文件相同。RSS标准定义了title和 description 标签名。这些标签名内包含了所要的数据。所有的RSS2.0 compliant feeds 都包含title和 description 这两个标签名。
来自:http://www.weather.gov/data/current_obs/KUGN.rss
<?xml version=1.0 encoding=ISO-8859-1 ?>
<rss version=2.0 xmlns:dc=http://purl.org/dc/elements/1.1/>
<channel>
<title>Weather at Chicago / Waukegan, Waukegan Regional Airport, IL - via NOAA's
National Weather Service</title>
<link>http://www.weather.gov/data/current_obs/</link>
<lastBuildDate>Sat, 28 Jul 2007 16:32:11 UT</lastBuildDate>
<ttl>60</ttl>
<description>Weather conditions from NOAA's National Weather Service.</description>
<language>en-us</language>
<managingEditor>robert.bunge@noaa.gov</managingEditor>
<webMaster>w-nws.webmaster@noaa.gov</webMaster>
<image>
<url>http://www.weather.gov/images/xml_logo.gif</url>
<title>NOAA - National Weather Service</title>
<link>http://www.weather.gov/data/current_obs/</link>
</image>
<item>
<title>Overcast and 73 degrees F at Chicago / Waukegan, Waukegan Regional Airport, IL</title>
<link>http://weather.noaa.gov/weather/current/KUGN.html</link>
<description>
<![CDATA[
<img src=http://weather.gov/weather/images/fcicons/ovc.jpg class=noaaWeatherIcon
width=55 height=58 alt=Overcast style=float:left; /><br />
))>
Winds are Northeast at 13 Gusting to 21 MPH. The pressure is 29.98 (1014.1 mb) and
the humidity is 81%. The heat index is 73. Last Updated on Jul 28, 10:52 am CDT.
</description>
<guid isPermaLink=false>Sat, 28 Jul 2007 10:52:00 -0500 CDT</guid>
</item>
</channel>
</rss>
9.3 RSS/XML字符数据过滤器
为了将字符数据(你真正需要的信息)从 RSS 流中提取出来,必须将所有的元文件(metatext)进行过滤。任何可以处理的HTML都必须先被翻译然后才能进行处理。 例如,<br>在 HTML 中表示新的一行,而在 RSS 流中则为“<br>”。过滤器必须将<br>正确翻译为回车换行。其他的被嵌入到字符数据中的 HTML 标签还包括段落标签<p>和图像标签<IMG>,分别对应 RSS流中的“<p>”、“<IMG…>”。段落标签被翻译为回车换行,如果被嵌入的系统不能处理图像,那么图像标签就会被忽略。
9.3.1 RSS/XML字符数据过滤器状态机
字符数据过滤器被??为一个有限状态机,只使用2个全局变量,1个状态变量和一个 FILO 队列。FILO 队列用于存储先前的字符。键入过滤器的每个字节数据从左边进入FILO,当前字符的位置为filo_buff[FILO_BUFF_SIZE-1]。FILO的缓冲大小由宏FILO_BUFF_SIZE设置,必须比可能的最大标签名还大。
#define FILO_BUFF_SIZE 32
状态:
STATE_ZERO
STATE_TAGSEARCH
STATE_INTAG
STATE_PRINT
STATE_SKIP
STATE_SKIP_NON_ASCII
STATE_SKIP_SPACE
STATE_CDATA
STATE_CDATA_PRINT
STATE_CDATA_SKIP_AMP
STATE_SKIP_INTAG
STATE_IN_AMPERSAND
全局变量:
unsigned char filo_buff[FILO_BUFF_SIZE);
unsigned char state;
unsigned char EMG_rss_text_filter(unsigned char data, unsigned char **tag_filter)

图12 字符过滤状态机
过滤器接收到一个XML或RSS流和一个标签表,仅输出被选中标签内的字符数据。标签表是一个指针数组,这些指针指向过滤器应该从中过滤出字符数据的标签字符串。
过滤器通常返回 0。当处理表中一个标签的>时,过滤器为该标签返回其在数组中的索引(之前已找到<)。例如,若在RSS或XML流中检测到一个<title>标签则过滤器返回0,若检测到<description>标签,则返回2。
Const unsigned char *tag_filter[] =
{
{(const unsigned char *)”title”},
{(const unsigned char *)”description”},
{(const unsigned char *)””}
};
tag_filter指针数组样例。

图13 字符数组过滤器使用方法
9.3.2 字符数据过滤器excercisor 的PC应用
PC应用可用于验证状态机。它将XML或RSS流作为一个文件打开,该流经过有限状态机后,输出结果到控制台。
// For testing read data from file, and send to filter
EMG_init_rss_text_filter;
for(; !feof(input_file);)
{
if ((length = fread(temp, 1, PACKET_SIZE, input_file))==0)
break;
if (ferror(input_file))
break;
for(i=0; i<length; i++)
{
ret = EMG_rss_text_filter(temp[i), (unsigned char **)tag_filter);
if(ret) // Print a new line after each tag
printf(\n);
}
}
利用9.2.1节的RSS流“RSS文件样例”,PC excercisor 输出的过滤结果如下:

图14 Kugn.rss Feed的过滤结果
wget命令用HTTP协议从远程服务器获取文件。本应用将wget命令升级为可支持字符数据过滤器。语法为:
wget <tag1><tag2> url
<tag1>和<tag2>是可选的,前后必须用<>隔开。而且,标签之间不能有空格。通过下面的宏可以增加可接收的标签数:
#define TAG_FILTER_SIZE 3

图15 用wget读取为过滤的RSS

图16 用wget和过滤器解析XML标签

图17 使用wget和过滤器的RSS Feed(上面未过滤,下面已过滤)


