【问题标题】:Delphi HTML parsingDelphi HTML解析
【发布时间】:2014-08-22 14:16:54
【问题描述】:

是的,我知道这个问题与我的其他问题非常相似。

在我的另一个问题中,我询问了 htmlp。
在我使用之前,我尝试使用 delphi 自己的单元。

我的代码是这样的:

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 raised exception class EVariantInvalidOpError with message 'Invalid variant operation'

有谁知道是什么原因造成的?
为什么会在这里发生,而在我的其他项目中却没有?
是的,除了 for 循环内部发生的部分之外,这两个函数都是相同的。

我想知道,这太令人困惑了xD

编辑

如果有人想对此进行测试。可以找到我试图获取的 html here 我保存了它以便于测试,并简单地使用了 stringlist.loadfromfile。

【问题讨论】:

  • 这是怎么回事?问题中的代码与答案中的代码相同。您在 this 帖子中 here 提出什么问题?
  • @RobKennedy 好吧,我在我的代码中尝试了很多方法来解决这个问题,并意外发布了无效代码。 MartynA 认为这是问题所在,并将其发布为答案。然后我在这里更正了我的代码。我在这篇文章中提出的问题是导致此错误的原因以及如何修复它。

标签: delphi html-parsing delphi-xe3


【解决方案1】:

恐怕这是因为您的代码是错误的,所以它似乎不太可能在您的“其他项目”中按原样工作。见下文。

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;

【讨论】:

  • 糟糕,这不是问题所在。我也会发布我其他项目的代码。
  • 我现在要投赞成票,接受答案会使这个问题似乎得到解决,但它还没有解决。
  • 也许您可以再次删除该编辑并在您的其他问题中处理。在您请求帮助的人在下载您的代码、调试代码并发布答案之后更改问题,这是对他们的不礼貌!
  • 您指的是哪个编辑?你是说我其他项目的例子吗?
  • 是的,来自您其他项目的代码。其中一个问题(它甚至无法编译)与您在此问题中首先提出的问题无关。
猜你喜欢
  • 2014-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-04
  • 2015-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多