例如,当我阅读使用TWebBrowser
(设计模式)使用以下代码生成的HTML页面的内容时:
function GetHTML(w: TWebBrowser): String;
Var
e: IHTMLElement;
begin
Result := '';
if Assigned(w.Document) then
begin
e := (w.Document as IHTMLDocument2).body;
while e.parentElement <> nil do
begin
e := e.parentElement;
end;
Result := e.outerHTML;
end;
end;
它在</HEAD>
之前添加META标签,例如:
<META content="MSHTML 6.00.2900.2180" name=GENERATOR>
或...
<META name=GENERATOR content="MSHTML 11.00.10570.1001">
读取outerHTML
时是否有摆脱标签的方法?
还是首先阻止MSHTML生成它?
还是其他一些摆脱它的方法?
答案 0 :(得分:1)
正如@Remy Lebeau指出的那样,您无法通过AFAIK控制此行为。但是,如果需要,可以轻松摆脱它。
我个人会使用实现Perl兼容正则表达式(PCRE)的正则表达式(System.RegularExpressionsCore),后者肯定存在于最后几个版本中,但我不知道它何时引入。
您将要使用类似以下内容的RegEx设置:
<META[^<]*GENERATOR\s*>
匹配所有以字符串中没有任何>并以GENERATOR(零个或多个空格)结尾。>您可以设置多行和不区分大小写匹配的选项。将ReplaceString设置为空字符串,然后您的代码(我在使用C ++ Builder标记时使用了C ++)将类似于:
TPerlRegEx * pRegEx;
pRegEx=new TPerlRegEx();
pRegEx->Replacement=UnicodeString(L"");
pRegEx->RegEx=UnicodeString(L"<META[^>]*GENERATOR\\s*>");
pRegEx->Options=TPerlRegExOptions() << preCaseLess << pre MultiLine;
pRegEx->Subject=szOuterHTML;
pRegEx->ReplaceAll();
delete(pRegEx);
当然,还有其他方法可以做到这一点,例如使用XML节点解析器并删除该节点,但是我认为RegEx简洁明了。这是处理文本文件的好工具。
如果您使用Google正则表达式语法,则应该找到一些不错的资源,包括在线检查器,以测试您的表达式是否按照您的预期进行。