Я хочу проанализировать таблицу html, используя html agility pack. Я хочу извлечь из таблицы только некоторые предопределенные данные столбцов.
Но я новичок в синтаксическом анализе и html-пакете гибкости, и я попытался, но я не знаю, как использовать пакет html agility для моей потребности.
Если кто-нибудь знает, дайте мне пример, если возможно
РЕДАКТИРОВАТЬ :
Возможно ли разобрать таблицу html, как если бы мы хотели получить только данные с именами определенных столбцов? Например, есть 4 столбца имя, адрес, phno, и я хочу извлечь только имя и адрес данных.
Существует пример того , что в дискуссионных форумах здесь . Прокрутите вниз немного, чтобы увидеть ответ таблицы. Я бы хотел, чтобы они предоставили лучшие образцы, которые легче найти.
EDIT: для извлечения данных из определенных столбцов вам нужно будет сначала найти теги <th>
, соответствующие столбцам, которые вы хотите, и запомнить их индексы. Затем вам нужно будет найти теги <td>
для тех же индексов. Предполагая, что вы знаете индексы столбцов, вы можете сделать что-то вроде этого:
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml("http://somewhere.com");
HtmlNode table = doc.DocumentNode.SelectSingleNode("//table");
foreach (var row in table.SelectNodes("//tr"))
{
HtmlNode addressNode = row.SelectSingleNode("td[2]");
//do something with address here
HtmlNode phoneNode = row.SelectSingleNode("td[5]");
// do something with phone here
}
Edit2: Если вы не знаете индексов столбцов, вы можете сделать все это так. Я не тестировал это.
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml("http://somewhere.com");
var tables = doc.DocumentNode.SelectNodes("//table");
foreach(var table in tables)
{
int addressIndex = -1;
int phoneIndex = -1;
var headers = table.SelectNodes("//th");
for (int headerIndex = 0; headerIndex < headers.Count(); headerIndex++)
{
if (headers[headerIndex].InnerText == "address")
{
addressIndex = headerIndex;
}
else if (headers[headerIndex].InnerText == "phone")
{
phoneIndex = headerIndex;
}
}
if (addressIndex != -1 && phoneIndex != -1)
{
foreach (var row in table.SelectNodes("//tr"))
{
HtmlNode addressNode = row.SelectSingleNode("td[addressIndex]");
//do something with address here
HtmlNode phoneNode = row.SelectSingleNode("td[phoneIndex]");
// do something with phone here
}
}
}