在c#中导入HTML表到datatable

本文关键字:表到 datatable HTML 导入 | 更新日期: 2023-09-27 17:52:13

我想将一些数据从HTML表导入到数据表中。据我所知,最好的方法是使用HTML敏捷性。这是我以前的代码但是我得到了错误

HtmlAgilityPack。HtmlNodeCollection'不包含'Select'的定义,也没有扩展方法'Select'接受类型为' htmllagilitypack '的第一个参数。HtmlNodeCollection'可以找到(你缺少使用指令或程序集引用吗?)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());
    //...

在c#中导入HTML表到datatable

您错过了允许您使用LINQ扩展方法的using。将这段添加到文件的顶部:

using System.Linq;

如果您在尝试调用row.SelectNodes("td").Select(..)时得到错误Value cannot be null. Parameter name: source,这意味着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());
}