代码之家  ›  专栏  ›  技术社区  ›  Jonas

通过htmldocument迭代。所有集合都在引用的样式表处停止?

  •  2
  • Jonas  · 技术社区  · 16 年前

    由于“bug in.net”通常不是问题的真正原因,我想知道我是否遗漏了一些东西。

    我做的事情感觉很简单。我正在迭代 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事件中完成的。

    1 回复  |  直到 13 年前
        1
  •  2
  •   Jonas    13 年前

    几年后,我回到这段代码中,最终发现问题在于我通过了 HtmlDocument.All 收藏在 WebBrowser.Navigated 事件处理程序。正确的方法是在 WebBrowser.DocumentCompleted .

    这个错误也导致了嵌入式脚本代码看起来像是“停止”了解析,就像前面提到的那样。 LINK 标签。实际上,它并没有停止——只是还没有完成整个文档的呈现。