我想将一些数据从HTML表导入数据表。从我所阅读的内容来看,最好的方法是使用HTML Agility。这是我以前使用的代码,但我收到错误
' HtmlAgilityPack.HtmlNodeCollection'不包含'选择'的定义没有扩展方法'选择'接受类型' HtmlAgilityPack.HtmlNodeCollection'的第一个参数。可以找到(您是否缺少using指令或程序集引用?)C:\ webbrowser \ WebBrowserControlDialogs \ MainForm.cs。
这是错误行:
otable.Rows.Add(row.SelectNodes("td").Select(td => td.InnerText).ToArray());
有关如何解决此问题的任何想法?理解
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
var document = webBrowser1.Document;
var documentAsIHtmlDocument3 = (mshtml.IHTMLDocument3)document.DomDocument;
var content = documentAsIHtmlDocument3.documentElement.outerHTML;
doc.LoadHtml(content);
DataTable otable = new DataTable();
otable.Columns.Add("ID .", typeof(string));
otable.Columns.Add("Art.", typeof(string));
otable.Columns.Add("E ram", typeof(int));
otable.Columns.Add("Hour", typeof(string));
otable.Columns.Add("S", typeof(int));
otable.Columns.Add("Ref", typeof(double));
foreach (var row in doc.DocumentNode.SelectNodes("//tr/td"))
{
otable.Rows.Add(row.SelectNodes("td").Select(td => td.InnerText).ToArray());
//...
答案 0 :(得分:5)
您错过了允许您使用using
扩展方法的LINQ。将其添加到文件顶部:
using System.Linq;
如果您在尝试拨打Value cannot be null. Parameter name: source
时收到错误row.SelectNodes("td").Select(..)
,则表示row.SelectNodes("td")
为null
。您应该更正您的代码和/或包括适当的空检查。我想你最初要选择tr
,然后你可以SelectNodes("td")
来获取单元格。
foreach (var row in doc.DocumentNode.SelectNodes("//tr"))
{
otable.Rows.Add(row.SelectNodes("td").Select(td => td.InnerText).ToArray());
}