# htmlparser **Repository Path**: mirrors_ying32/htmlparser ## Basic Information - **Project Name**: htmlparser - **Description**: delphi html parser(代码是改自原wr960204的HtmlParser) - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-02-24 - **Last Updated**: 2026-05-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # htmlparser delphi html parser 代码是改自原wr960204的[HtmlParser](http://www.raysoftware.cn/?p=370),因为自己的需求需要对html进行修改操作,但无奈只支持读取操作,所以在此基础上做了修改并命名为HtmlParserEx.pas与之区别。 #### 使用 ```delphi // 从文件加载示例 procedure Test; var LHtml: IHtmlElement; LList: IHtmlElementList; LStrStream: TStringStream; begin LStrStream := TStringStream.Create('', TEncoding.UTF8); try LStrStream.LoadFromFile('view-source_https___github.com_ying32_htmlparser.html'); LHtml := ParserHTML(LStrStream.DataString); if LHtml <> nil then begin LList := LHtml.SimpleCSSSelector('a'); for LHtml in LList do Writeln('url:', lhtml.Attributes['href']); end; finally LStrStream.Free; end; end; ``` #### 修改记录 ying32修改记录: Email:1444386932@qq.com 2017年05月04日 1、去除RegularExpressions单元的引用,不再使用TRegEx改使用RegularExpressionsCore单元中的TPerlRegEx 2017年04月19日 1、增加使用XPath功能的编译指令"UseXPath",默认不使用XPath,个人感觉没什么用 2016年11月23日 1、简单支持XPath,简单的吧,利用xpath转css selector,嘿 xpath转换的代码改自[python版本](https://github.com/santiycr/cssify/blob/master/cssify.py) > IHtmlElement ```delphi 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 ```delphi // 修改属性 EL.Attributes['class'] := 'xxxx'; // 修改标记 EL.TagName = 'a'; // 移除自己 EL.Remove; // 移除子结点 EL.RemoveChild(El2); // css选择器查找,简化用 El.Find('a'); // 附加一个新的元素 el2 := El.AppendChild('a'); ``` > IHtmlElementList ```delphi // 移除选择的元素 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); ```