使用HTMLPaser解析HTML数据

来源:互联网 发布:黑暗之魂3低配置优化 编辑:程序博客网 时间:2024/04/23 15:10

1, 首先我们通过 
ns::Data data(ns::URL(...));
得到目标得HTML文件如下:

<div id ="tab">    <ul>        <li>div id ul li</li>        <li>div id ul li</li>        <li>div id ul li</li>    </ul></div><div id ="tab">    <div id="tab2">        <ul>            <li>div div id ul li</li>            <li>div div id ul li</li>            <li>div div id ul li</li>        </ul>    </div></div><div>DIV</div><li><a>NO ATTR</a></li><li><a class="cls red">HELLO</a></li><li id="abc">ID</li><li id="abc" class="blue">ID CLASS</li><li style="#a1:.">style a1</li><li style="a2">style a2</li>


2,普通得处理方式可能就是通过HTML解析器器遍历所有节点,挨个判断找出目标数据。或者通过正则表达式进行字符串分析,得到数据。这些方法存在逻辑复杂和 难以写出高效稳定的正则表达式的问题。

3, 在WSI中,我们可以通过 ::wsi::html::Document 类进行类似HTML解析器的分析工作。并且,::wsi::html::Document 提供 JQuery 的查询功能,可以利用 JQuery 语法,快速稳定查找出目标节点。

4, JQuery 语法: HTML标签.CSS类[属性=”值”] HTML标签.CSS类[属性=”值”] ....
说明: 父标签 子标签

5, 例子:
::wsi::html::Document doc(::wsi::core::type_cast<::wsi::core::data>(data)); // 转换NSData到C++支持的core::data 类。然后打开文档。

如果需要得到 <li><a class="cls red">HELLO</a></li> 节点::wsi::html::Document::query_result result; // 查询的结果会以 ::wsi::html::Element* 的指针形式保存在result中。       doc.jquery(“li a.red”, result);此时就可以对result进行处理。::wsi::html::Node const* node = (::wsi::html::Node const*)result[0];ns::String str = node->value(); // 得到 HELLO
原创粉丝点击