由于“.NET中的bug”通常不是问题的真正原因,我想知道我是否在这里遗漏了一些东西。
我正在做的事情很简单。我正在迭代HtmlDocument
中名为doc
的元素,如下所示:
System.Diagnostics.Debug.WriteLine("*** " + doc.Url + " ***");
foreach (HtmlElement field in doc.All)
System.Diagnostics.Debug.WriteLine(string.Format("Tag = {0}, ID = {1} ", field.TagName, field.Id));
然后我发现调试窗口输出是这样的:
Tag = !, ID =
Tag = HTML, ID =
Tag = HEAD, ID =
Tag = TITLE, ID =
Tag = LINK, ID =
...当实际的HTML文档如下所示:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Protocol</title>
<link rel="Stylesheet" type="text/css" media="all" href="ProtocolStyle.css">
</head>
<body onselectstart="return false">
<table>
<!-- Misc. table elements and cell values -->
</table>
</body>
</html>
注释掉LINK
标记可以解决我的问题,并且文档已完全解析。 ProtocolStyle.css
文件存在于磁盘上并正确加载,如果这很重要的话。这是.NET 3.5 SP1中的错误,还是什么?对于这样一个面向Web的框架,我发现很难相信它会有这么大的错误。
更新:顺便说一下,这次迭代是在WebBrowser控件的Navigated事件中完成的。
答案 0 :(得分:2)
几年后,我回到了这段代码,最后发现问题在于我走遍了HtmlDocument.All
事件处理程序中的WebBrowser.Navigated
集合。正确的方法是遍历WebBrowser.DocumentCompleted
中的元素。
这个错误也导致嵌入式脚本代码看似“停止”解析,就像前面提到的LINK
标签一样。实际上,它并没有停止 - 它还没有完成渲染整个文档。