将html表导入c#中的数据表

时间:2014-03-21 20:16:13

标签: c#

我想将一些数据从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());
    //...

1 个答案:

答案 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());
}