2Pascal-新时代的Pascal

 找回密码
 立即注册
搜索
热搜: fastreport
查看: 1932|回复: 0
打印 上一主题 下一主题

htmlparser解析器(ying32著)

[复制链接]

29

主题

73

帖子

727

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
727
跳转到指定楼层
楼主
发表于 2017-2-8 15:42:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
京东购书支持本站
摘自 http://blog.csdn.net/zyjying520/article/details/53191592htmlparser

delphi html parser

代码是改自原wr960204的HtmlParser,因为自己的需求需要对html进行修改操作,但无奈只支持读取操作,所以在此基础上做了修改并命名为HtmlParserEx.pas与之区别。

修改记录

2016年11月23日

1、简单支持XPath,简单的吧,利用xpath转css selector,嘿
xpath转换的代码改自python版本
另外对正则System.RegularExpressions.pas中TGroupCollection.GetItem进行了改进,没有找到命名组
且非PCRE_ERROR_NOSUBSTRING时返回空的,而不是抛出一个异常。暂时就简单粗爆的直接改吧,官方网站
上看到有人提过这个QC,不知道后面有没有解决。

IHtmlElement
  LHtml.FindX('/html/head/title').Each(    procedure(AIndex: Integer; AEl: IHtmlElement)     begin      Writeln('xpath index=', AIndex, ',  a=', AEl.Text);      end  );

2016年11月15日

IHtmlElement和THtmlElement的改变:
1、Attributes属性增加Set方法
2、TagName属性增加Set方法
3、增加Parent属性
4、增加RemoveAttr方法
5、增加Remove方法
6、增加RemoveChild方法
7、增加Find方法,此为SimpleCSSSelector的一个另名
8、_GetHtml不再直接附加FOrignal属性值,而是使用GetSelfHtml重新对修改后的元素进行赋值操作,并更新FOrignal的值
9、增加Text属性
10、修改InnerText与Text属性增加write功能
11、增加AppedChild方法
IHtmlElementList和THtmlElementList的改变:
1、增加RemoveAll方法
2、增加Remove方法
3、增加Each方法
4、增加Text属性
修改后的新功能的一些使用法
IHtmlElement
     // 修改属性     EL.Attributes['class'] := 'xxxx';       // 修改标记       EL.TagName = 'a';       // 移除自己       EL.Remove;        // 移除子结点       EL.RemoveChild(El2);       // css选择器查找,简化用       El.Find('a');       // 附加一个新的元素       el2 := El.AppendChild('a');  
IHtmlElementList
  // 移除选择的元素  LHtml.Find('a').RemoveAll;  // 查找并遍沥  LHtml.Find('a').Each(    procedure(AIndex: Integer; AEl: IHtmlElement)    begin      Writeln('Index=', AIndex, ',  href=', AEl.Attributes['href']);    end);  // 直接输出,仅选中的第一个元素  Writeln(LHtml.Find('title').Text);
源代码下载

https://github.com/ying32/htmlparser


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|新时代Pascal论坛

GMT+8, 2024-12-22 12:12 , Processed in 0.056952 second(s), 24 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表