跨平台的Html解析代码,甩掉包袱的选择

跨平台的Html解析代码
当时写了这个Html解析,可以跨Windows,MacOSX的平台.但是随着Delphi XE5的发布,发现这个代码在Android平台不能用了,因为Delphi在移动平台上的字符串字符索引下标变成0了,带来了很多问题.
于是把这个HTML解析器重写了一个版本,放弃对Delphi XE3以下版本的支持,轻装上阵.
因为也有传说易博龙会在以后某个时期放弃移动版本Delphi对指针的支持,所以这次重写的新版本里面完全去掉了指针的语法.
对外的接口基本没变,所以旧代码可以方便迁移上来.新的单元名叫HtmlParser_XE3UP.pas,很直接吧.同时如果是广大旧版本Delphi的朋友可以使用旧的HtmlParser.pas,两者接口完全相同.
新版本支持 Windows,MacOSX,iOS,Android 这些平台,但仅支持Delphi XE3以上的版本.
旧版本支持 Windows,MacOSX 这些平台,支持Delphi7以后的全部版本.

使用的例子:

var
  FNodes: IHtmlElement;
  l: IHtmlElementList;
  //把HTML代码解析到Element的树形结构
  FNodes := parserHtml(HTML代码);
  //使用CSS选择器的语法搜索, 返回是个符合条件结果的集合.CSS选择器语法如果不熟悉Web开发的可以看http://www.cnblogs.com/webblog/archive/2009/07/07/1518274.html
  l := FNodes.SimpleCSSSelector('div#header ~ div#main div#container [role]');
  

下载地址HtmlParser
SVN:http://code.google.com/p/delphi-html-parser/

此条目发表在Delphi, 未分类分类目录。将固定链接加入收藏夹。

跨平台的Html解析代码,甩掉包袱的选择》有 16 条评论

  1. pony6678说:

    貌似选择器这样会有问题
    div .classname [Attributename]

  2. pony6678说:

    div .classname [Attributename]

    忘记说了 Attributename 中有横杠 [absd-ssd]

    楼主看一下其他名称中有-会不会有问题

  3. 说:

    发现不能解析的bug:
    原因不清楚,碰到的这个页面http://forum.ea3w.com/ 用parserHtml进行解析就异常。 还发现一些别的。 数量不少。 我用的d7。

    • admin说:

      D7不支持Unicode使用起来不方便,版本和语法又太老.我现在已经决定放弃对D7的维护了.
      你给的页面用HtmlParser_XE3UP解析没问题的.

      • 说:

        谢谢你的回复。 从d7迁移到xe以上 对我来说改动太大。 而且 不知道这个能否支持xe5 . 2ccc上流传的那些xe5都有人说用不了 又没那么多钱买。。。 不知是否能出个100元 大牛你稍微看看看?? 太难我就迁移算了。

  4. 说:

    已在测试xe5 大牛不要耽误时间了。 这个类很好用。

  5. 说:

    我直接抑郁了。。。svn下来的代码 XE5新建立一下空的工程 ,用htmlpaser.pas ParserHTML(Memo1.Text); 程序不报错 。。只是直接卡住没反映。。换成HtmlParser_XE3UP.pas 同样是卡死。 但是 我编译你demo下的就没有问题。。 求帮助。谢谢。 我的环境:xp xe5精简。

  6. 匿名说:

    d2010运行demo

    div[class|="main_wrapper2"]
    div[class^="main_wrapper2"]
    div[class$="main_wrapper2"]
    这几个选择器,选出的结果不对;这几个应该都能取出

  7. 匿名说:

    HTML解析能不能不解析 NOSCRIPT 里面的,他里面的自动过滤掉行不行?

  8. 匿名说:

    老大,有没有可用的Delphi的AMF解析类啊,或者想个办法把其它语言的解析类做个接口套过来啊(比如 JS,PHP之类的)

  9. 小菜说:

    大神你好,这个链接html使用下面的函数无法解析,帮忙看一下,谢谢
    S := ‘p#page a';
    PageList := FNodes.SimpleCSSSelector(S);

    http://www.baidu.com/s?wd=%E6%85%A2%E6%80%A7%E4%B8%99%E8%82%9D%E8%83%BD%E6%B2%BB%E5%A5%BD%E5%90%97

admin进行回复 取消回复

电子邮件地址不会被公开。

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

你必须启用JavaScript