Próbuję parsować HTML przez parser MSHTML w Delphi 10 Seattle. Działa dobrze, ale tag ARTYKUŁ myl go, analizowany element ARTYKUŁ nie ma innerHTML i dzieci, mimo że są tam.Nieprawidłowy parsujący tag ARTYKUŁA przez MSHTML
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
Variants,
ActiveX,
MSHTML;
procedure DoParse;
var
idoc: IHTMLDocument2;
iCollection: IHTMLElementCollection;
iElement: IHTMLElement;
V: OleVariant;
HTML: String;
i: Integer;
begin
Html :=
'<html>'#10+
'<head>'#10+
' <title>Articles</title>'#10+
'</head>'#10+
'<body>'#10+
' <article>'#10+
' <p>This is my Article</p>'#10+
' </article>'#10+
'</body>'#10+
'</html>';
v := VarArrayCreate([0,1], varVariant);
v[0]:= Html;
idoc := CoHTMLDocument.Create as IHTMLDocument2;
idoc.designMode := 'on';
idoc.write(PSafeArray(System.TVarData(v).VArray));
idoc.close;
iCollection := idoc.all as IHTMLElementCollection;
for i := 0 to iCollection.length-1 do
begin
iElement := iCollection.item(i, 0) as IHTMLElement;
if assigned(ielement) then
WriteLN(iElement.tagName + ': ' + iElement.outerHTML);
end;
end;
begin
try
DoParse;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
ReadLN;
end.
Wyjście programu jest
HTML: <HTML><HEAD><TITLE>Articles</TITLE>
<META name=GENERATOR content="MSHTML 11.00.9600.18283"></HEAD>
<BODY><ARTICLE>
<P>This is my Article</P></ARTICLE>undefined</BODY></HTML>
HEAD: <HEAD><TITLE>Articles</TITLE>
<META name=GENERATOR content="MSHTML 11.00.9600.18283"></HEAD>
TITLE: <TITLE>Articles</TITLE>
META:
<META name=GENERATOR content="MSHTML 11.00.9600.18283">
BODY:
<BODY><ARTICLE>
<P>This is my Article</P></ARTICLE>undefined</BODY>
ARTICLE: <ARTICLE>
P:
<P>This is my Article</P>
/ARTICLE: </ARTICLE>
Jak widać, istnieją błędy z tagiem artykułu, nie ma treści i/artykuł jest definiowana jako oddzielnego tagu.
Czy ktoś może mi pomóc zrozumieć ten problem?
masz rację, z dodaną przestrzenią nazw html został poprawnie przeanalizowany. ale ARTYKUŁ nie jest tagiem niestandardowym, jest tagiem HTML5, a oryginalna strona html z prawdziwego źródła jest z powodzeniem analizowana przez IE 11 (muszę parsować stronę na żywo, niestety). Czy to oznacza, że mam problemy ze zgodnością IE? W każdym razie, dziękuję bardzo za wyjaśnienie! –
Masz rację, problem został rozwiązany przez dodanie klucza zgodności do rejestru. Chociaż oryginalny dokument został zdefiniowany za pomocą znaczników . Wielkie dzięki! –
Nie ma za co. – kobik