C# 3.0 将Html表转换为datatable的最佳方式是什么

C# 3.0 将Html表转换为datatable的最佳方式是什么,c#-3.0,C# 3.0,我有一个html表。我想把它转换成一个数据表。这样做的最佳方式是什么? 谢谢不要自己解析HTML,有解析库可以帮你完成。再加上和LINQ,您可以在短时间内完成这项工作 var doc = new HtmlDocument(); doc.Load(url); var nodes = doc.DocumentNode.SelectNodes("//table/tr"); var table = new DataTable("MyTable"); var headers = nodes[0]

我有一个html表。我想把它转换成一个数据表。这样做的最佳方式是什么?
谢谢

不要自己解析HTML,有解析库可以帮你完成。再加上和LINQ,您可以在短时间内完成这项工作

var doc = new HtmlDocument();
doc.Load(url);

var nodes = doc.DocumentNode.SelectNodes("//table/tr");
var table = new DataTable("MyTable");

var headers = nodes[0]
    .Elements("th")
    .Select(th => th.InnerText.Trim());
foreach (var header in headers)
{
    table.Columns.Add(header);
}

var rows = nodes.Skip(1).Select(tr => tr
    .Elements("td")
    .Select(td => td.InnerText.Trim())
    .ToArray());
foreach (var row in rows)
{
    table.Rows.Add(row);
}
……几年后

var nodes = doc.DocumentNode.SelectNodes("//table/tr");
这行有输入错误,需要在“table”后面加上双正斜杠,一切都像一个符咒

var nodes = doc.DocumentNode.SelectNodes("//table//tr");

这会考虑colspans和表格样式(css)吗?这看起来像是简单地转换数据和元素markup@user327999:不,这只是一对一映射。DataTables没有这样的功能,我只是下载了HtmlAgilityPack 1.4.6来实现这一点。该网站称目前还没有相关文件。我尝试按照这里的示例进行操作,但在这里得到了一个NullReferenceException:
var headers=nodes[0].Elements(“th”).Select(th=>th.InnerText.Trim())
节点为
null
。如何使用此控件?我在哪里可以找到它的当前文档?@jp2code:这取决于您正在解析的标记。诚然,文档是缺乏的,但是大多数方法都有常规的XML文档,这应该足够了,上次我检查时已经足够了。但我相信它是以
XmlDocument
和相关类为模型的,因此如果您熟悉使用XML库解析XML,您应该会感到很自在
nodes
是调用
HtmlNode.SelectNodes()
的结果,您将其传入xpath选择器。显然,在您的示例中没有找到具有直接行的表。我做了一些小的调整以适合我的表,但它工作得非常好。。非常感谢。这不一定是正确的,至少,把它归类为打字错误是错误的。。。视情况而定,可能是错的。大多数人编写的表中,
tr
元素是
table
节点的直接子元素。(
)但如果行位于
tbody
元素下,则可能需要这样的更改。如果是这样的话,那就不会错了,但我想说,这并不常见。但这会有问题,特别是当涉及嵌套表时。但是那纯粹是情境性的。。。像这样的情况。