Tôi đang cố gắng phân tích cú pháp HTML bằng trình phân tích cú pháp MSHTML ở Delphi 10 Seattle. Nó hoạt động tốt, nhưng thẻ ARTICLE gây nhầm lẫn nó, phân tích yếu tố ARTICLE không có innerHTML và trẻ em, mặc dù chúng ở đó.Phân tích cú pháp thẻ ARTICLE không hợp lệ theo 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.
Output của chương trình là
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>
Như bạn thấy, có lỗi với thẻ ĐIỀU, nó không có nội dung và/ĐIỀU được định nghĩa là thẻ riêng biệt.
Ai đó có thể giúp tôi hiểu vấn đề này không?
bạn đúng, với html không gian tên đã thêm được phân tích cú pháp chính xác. nhưng ARTICLE không phải là thẻ tùy chỉnh, đó là thẻ HTML5 và trang html gốc từ nguồn thực được phân tích cú pháp bởi IE 11 thành công (tôi cần phân tích trang trực tiếp, không may). Nó có nghĩa là tôi có vấn đề với khả năng tương thích của IE? Dù sao, cảm ơn bạn rất nhiều vì đã giải thích! –
Bạn đã đúng, vấn đề đã được giải quyết bằng cách thêm khóa tương thích vào sổ đăng ký. Mặc dù, tài liệu gốc được xác định bằng thẻ . Cảm ơn rất nhiều! –
Bạn được chào đón. – kobik