delphihtml解析
是的,我知道这个问题将与我的另一个问题非常相似 在我的另一个问题中,我问了关于htmlp的问题。delphihtml解析,delphi,html-parsing,delphi-xe3,Delphi,Html Parsing,Delphi Xe3,是的,我知道这个问题将与我的另一个问题非常相似 在我的另一个问题中,我问了关于htmlp的问题。 在我使用它之前,我试着使用德尔福自己的单位 我的代码是这样的: procedure DesectTable(L:TStrings); var doc:OleVariant; el:OleVariant; i:integer; begin doc := coHTMLDocument.Create as IHTMLDocument2; doc.write(L.Text); doc
在我使用它之前,我试着使用德尔福自己的单位 我的代码是这样的:
procedure DesectTable(L:TStrings);
var
doc:OleVariant;
el:OleVariant;
i:integer;
begin
doc := coHTMLDocument.Create as IHTMLDocument2;
doc.write(L.Text);
doc.close;
for i:=0to doc.body.all.length-1 do // Breaks here
begin
el:=doc.body.all.item(i);
if el.tagname='TR' then
begin
if (el.classname='even') or (el.classname='odd') then
writeln(el.innerhtml);
end;
end;
end;
这是我在另一个项目中使用的代码,它确实起作用。但在这个函数中,我得到一个错误:
Project F1Times.exe引发异常类evariantivalidoperror,并显示消息“variant operation无效”
有人知道这是什么原因吗?为什么它发生在这里而不是我的另一个项目中?
是的,除了
for
循环内部发生的部分之外,这两个功能是相同的
我想知道,这太令人困惑了
编辑
如果有人想测试这个。可以找到我试图获取的html
为了便于测试,我保存了它,并简单地使用了stringlist.loadfromfile。恐怕是因为您的代码错误,所以它似乎不太可能像您的“其他项目”中那样工作。见下文
procedure DesectTable(L:TStrings);
var
doc:OleVariant;
el:OleVariant;
i:integer;
begin
doc := coHTMLDocument.Create as IHTMLDocument2;
doc.write(L.Text);
doc.close;
// for i:=0to doc.body.items.all.length-1 do // Breaks here
for i:=0 to doc.body.all.length-1 do
begin
el:=doc.body.all.item(i);
if el.tagname='TR' then
begin
if (el.classname='even') or (el.classname='odd') then
writeln(el.innerhtml);
end;
end;
end;
糟糕,这不是问题所在。我也会发布我另一个项目的代码。我现在会投票,接受一个答案会让这个问题看起来已经解决了,但它还没有解决。也许你可以再次删除这个编辑,并在你的另一个问题中处理这个问题。在你请求帮助的人下载你的代码、调试代码并发布答案后,他们可能会不厌其烦地更改问题,这对他们来说是一种不礼貌的行为!你指的是哪个编辑?你是说我另一个项目的例子?是的,你另一个项目的代码。其中一个问题(它甚至不会编译)与您在这个问题中第一次问到的问题无关?问题中的代码与答案中的代码相同。在这篇文章中,你在问什么问题?@RobKennedy我在我的代码中尝试了很多方法来解决这个问题,但无意中发布了无效的代码。MartynA认为这就是问题所在,并将其作为答案发布。然后我在这里更正了我的代码。我在这篇文章中问的问题是,是什么导致了这个错误,以及如何修复它。