gpt4 book ai didi

html - MSHTML 解析 ARTICLE 标签无效

转载 作者:太空狗 更新时间:2023-10-29 15:00:28 24 4
gpt4 key购买 nike

我正在尝试通过 Delphi 10 Seattle 中的 MSHTML 解析器解析 HTML。它工作正常,但 ARTICLE 标签混淆了它,解析的 ARTICLE 元素没有 innerHTML 和子元素,尽管它们在那里。

    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.

程序的输出是

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>

如您所见,ARTICLE 标签存在错误,它没有内容并且/ARTICLE 被定义为单独的标签。

有人可以帮助我理解这个问题吗?

最佳答案

查看文档:custom element | custom object .

The Windows Internet Explorer support for custom tags on an HTML page requires that a namespace be defined for the tag. Otherwise, the custom tag is treated as an unknown tag when the document is parsed. Although navigating to a page with an unknown tag in Internet Explorer does not result in an error, unknown tags have the disadvantage of not being able to contain other tags, nor can they have behaviors applied to them.

在你的情况下 ARTICLE是一个未知标签。要使其成为可以包含其他标签的自定义标签,您需要为其添加命名空间。例如<MY:ARTICLE>并声明命名空间 <html XMLNS:MY> (如果你没有声明命名空间,DOM 解析器会自动添加它)

另请参阅:Using Custom Tags in Internet Explorer


在您的评论中,您提到您正在尝试解析实时 HTML5 页面(您没有在问题中提到这一点)。
由于我不是 HTML5 专家,所以我没有关联 ARTICLE 标记为 HTML5 标准。

您的程序默认运行在IE7兼容模式下,因此MSHTML并不知道这个特殊标签并将其视为未知标签。

所以要么尝试添加 <!DOCTYPE html>作为 HTML 的第一行并添加 <meta http-equiv="X-UA-Compatible" content="IE=edge">作为 HEAD 的第一行部分(它必须是第一个)。或者尝试添加 FEATURE_BROWSER_EMULATION注册表项:How to have Delphi TWebbrowser component running in IE9 mode?

附言:idoc.designMode := 'on';不需要。

关于html - MSHTML 解析 ARTICLE 标签无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37293796/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com