当存在有效的子元素时,为什么我的HtmlElement的FirstChild属性为null?

时间:2013-08-19 04:01:24

标签: c# .net null webbrowser-control

我正在编写一个使用Windows窗体WebBrowser控件从网站上删除数据的程序。

我在一个名为<tr>的变量中存储了一个表示行(row标记)的HtmlElement。使用row.FirstChild的后续代码返回null。

当我在Visual Studio立即窗口中运行? row时,输出包含以下看似矛盾的行。 (数据已经通过用&#39; Z替换字母和数字为0进行消毒;空格保持不变;为了便于阅读,添加了换行符。)

Children: {System.Windows.Forms.HtmlElementCollection}
FirstChild: null
InnerHtml: "\n\t\t<td class=\"rgGroupCol\">&nbsp;</td><td>00000000</td>
           <td>ZZZ 000</td><td>Text Remvd I: Zzzzzzzz Zzzzzzzzz</td><td>0</td>
           <td>Zzzzzzzzz</td><td>Zz</td>
           <td>\n\t\t\t\t\t\t\t00:00 Z 00:00 Z\n\t\t\t\t\t\t</td>
           <td>\n\t\t\t\t\t\t\t0/00/0000 to 00/00/0000\n\t\t\t\t\t\t</td>
           <td>Zzzzz Zzzzzzzz 000</td><td>Zzzzz Z Zzzzzzz</td>\n\t"

在我看来,由于InnerHtml字符串明确存在多个标记,FirstChild不应为空。实际上,当我在Locals窗口中展开Children属性时,其Count为11,我可以展开Results View以查看我期望的各个标记。

该网站的所有者最近对其进行了更新,并引入了大量的HTML和脚本错误;但是,W3C验证器不会在页面的这一部分报告任何错误,我也不会发现这些标签有任何问题。我在ScriptErrorsSuppressed = true对象上设置了WebBrowser,并且已将HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION\MyProg.vshost.exe设置为10001。

环境详情:

  • 带有Windows Media Center的Windows 8 Pro 64位
  • Internet Explorer 10.0.9200.16635
  • 在.NET 4.5中的C#5.0中使用System.Windows.Forms.WebBrowser控件编译为64位可执行文件

我在这里缺少什么?当有明显的孩子在场时,FirstChild怎么能为空?如果我没有看到HTML的某些问题,如何在不更改页面(属于其他人)的情况下解决它?

解决方法
面对正在运行然后突然停止工作的代码,我非常注重找到原因,我完全错过了明显的解决方法。第二天晚上它跳了出来,就在这里。我只是将row.FirstChild替换为row.Children[0],其余代码运行不变且成功。当然,这并不能解释我所看到的行为,但确实让我超越了它。

0 个答案:

没有答案