【发布时间】:2012-08-21 18:55:55
【问题描述】:
HTML 正在使用内置 WebControl 的 WinForm 中显示
我决定试试 HTMLAgilityPack。
var query = from table in doc.DocumentNode.SelectNodes("//table[@class='TABLEBORDER').Cast<HtmlNode>()
from row in table.SelectNodes("tr").Cast<HtmlNode>()
from cell in row.SelectNodes("th|td").Cast<HtmlNode>()
select new {Table = table.Id, CellText = cell.InnerText};
foreach(var cell in query) {
Console.WriteLine("{0}: {1}", cell.Table, cell.CellText);
}
我根据@L.B 更新了代码 我得到以下输出
The thread '<No Name>' (0x1e94) has exited with code 0 (0x0).
:
Target
:
Triggerenabled?
:
Account
:
Passwordchanged?
:
Error message(if any)
The thread '<No Name>' (0x2564) has exited with code 0 (0x0).
其他数据在 webcontrol 上清晰可见。
【问题讨论】:
-
如果您想在不使用任何 3rd 方代码的情况下解析重要的 HTML,那么您将陷入困境。您可能可以使用一些复杂的正则表达式或一些丑陋的子字符串搜索/提取代码来做到这一点。但它会很脆弱,很难维护。另一种选择是编写您自己的更通用的 HTML 解析器,这将花费您数年的时间。解析 HTML 很难做到正确,除非您有非常令人信服的理由不这样做,否则我会使用已经完成的东西。
-
在这个时代,没有第 3 方插件让我觉得这是不合理的要求。这是什么原因? HTML5 数据属性加上一点 jQuery 就可以轻松解决这个问题。
-
我认为在互联网出现之前这只是一个合理的要求;)为什么要重新发明可以回收的东西?
-
我过去尝试过WATIN,发现IE需要Admin privs来解析html。所以我放弃了WATIN。我需要一些非管理员可以用来执行数据输入的东西(我使用 webControl1.Document.GetElement 完成了所有数据输入...
-
.. 你到底想做什么?听起来,也许是自动填写表单(在其他人的网站上)和/或使用浏览器控件从 winforms 应用程序中抓取?
标签: c# linq html-parsing dom