gpt4 book ai didi

c# - HTML 敏捷包

转载 作者:行者123 更新时间:2023-11-30 15:11:24 25 4
gpt4 key购买 nike

我在一个网页中有 html 表格,例如

<table border=1>
<tr><td>sno</td><td>sname</td></tr>
<tr><td>111</td><td>abcde</td></tr>
<tr><td>213</td><td>ejkll</td></tr>
</table>

<table border=1>
<tr><td>adress</td><td>phoneno</td><td>note</td></tr>
<tr><td>asdlkj</td><td>121510</td><td>none</td></tr>
<tr><td>asdlkj</td><td>214545</td><td>none</td></tr>
</table>

现在从这个使用 html agility pack 的网页我想提取列地址和电话的数据。这意味着我首先在哪个表中找到了列地址和电话号码。找到该表后我想提取该列地址和电话号码的数据我应该怎么做?

我可以拿到 table 。但是之后我该怎么办不明白。

还有一件事:我们可以通过列名从表中提取数据是可行的。

最佳答案

这里有一些辅助方法可以帮助您将 HTML 表格解析为 DataTable实例。您可以遍历结果 DataTable array 来找到包含你想要的列的那个。该代码与 HTML 中表格的格式相结合,在这种情况下,它从第一行 (<tr>) 获取列信息。另请注意,不会执行任何错误检查,因此这将破坏不遵循您指定格式的表格。

辅助方法:

private static DataTable[] ParseAllTables(HtmlDocument doc)
{
var result = new List<DataTable>();
foreach (var table in doc.DocumentNode.Descendants("table"))
{
result.Add(ParseTable(table));
}
return result.ToArray();
}

private static DataTable ParseTable(HtmlNode table)
{
var result = new DataTable();

var rows = table.Descendants("tr");

var header = rows.Take(1).First();
foreach (var column in header.Descendants("td"))
{
result.Columns.Add(new DataColumn(column.InnerText, typeof(string)));
}

foreach (var row in rows.Skip(1))
{
var data = new List<string>();
foreach (var column in row.Descendants("td"))
{
data.Add(column.InnerText);
}
result.Rows.Add(data.ToArray());
}
return result;
}

使用示例:

public static void Main(string[] args)
{
string html = @"
<html><head></head>
<body><div>
<table border=1>
<tr><td>sno</td><td>sname</td></tr>
<tr><td>111</td><td>abcde</td></tr>
<tr><td>213</td><td>ejkll</td></tr>
</table>
<table border=1>
<tr><td>adress</td><td>phoneno</td><td>note</td></tr>
<tr><td>asdlkj</td><td>121510</td><td>none</td></tr>
<tr><td>asdlkj</td><td>214545</td><td>none</td></tr>
</table>
</div></body>
</html>";

HtmlDocument doc = new HtmlDocument();

doc.LoadHtml(html);

DataTable addressAndPhones;
foreach (var table in ParseAllTables(doc))
{
if (table.Columns.Contains("phoneno") && table.Columns.Contains("adress"))
{
// You found the address and phone number table
addressAndPhones = table;
}
}
}

关于c# - HTML 敏捷包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2431652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com