<text>
<![CDATA[
<img style="vertical-align: middle;" src="http://www.bjp.org/images/stories/economic_cell_1.jpg" width="600" />
<img style="vertical-align: middle;" src="http://www.bjp.org/images/stories/economic_cell_2.jpg" width="600" />
]]>
</text>
</description>
这是我的RSS Feed我想通过使用sax解析器从这里获取描述。但我无法做到这一点所以请帮助并建议我所有可能的方法来做到这一点 提前谢谢
答案 0 :(得分:2)
CDATA只是告诉解析器不要将尖括号视为XML标记。您可以像标记内的任何其他字符数据一样获取内容。既然你没有在这里提到Python的任何内容:
import xml.sax
from cStringIO import StringIO
class Handler(xml.sax.handler.ContentHandler):
def characters(self, content):
print content
rss = '<text><![CDATA[<img style="vertical-align: middle;" src="http://www.bjp.org/images/stories/economic_cell_1.jpg" width="600" /><img style="vertical-align: middle;" src="http://www.bjp.org/images/stories/economic_cell_2.jpg" width="600" />]]></text>'
xml.sax.parse(StringIO(rss), Handler())
答案 1 :(得分:0)
不知道您要使用哪种语言进行解析。由于我只使用C ++,因此这里是使用AX解析器生成器编写的CDATA解析器:
std::string cdata;
auto cdata_rule = "<![CDATA[" & *(axe::r_any() - "]]>") >> cdata & "]]>";
// now do the parsing of input
cdata_rule(input.begin(), input.end());
// parse img elements
std::vector<std::string> sources; // all your img sources will be here
auto src_rule = "src=\"" & *(r_any() - '"') >> r_push_back(sources) & '"';
auto ignore = *(r_any() - "src=");
auto tail = *(r_any() - "/>") & "/>" & *r_any(" \t\n");
auto img_rule = *("<img & ignore & src_rule & tail);
auto result = img_rule(cdata.begin(), cdata.end());
免责声明:我没有测试上面的代码,可能会出现轻微错误。