Вопрос

Я хочу проанализировать html-таблицу с помощью html agility pack.Я хочу извлечь из таблицы только некоторые предопределенные данные столбца.

Но я новичок в синтаксическом анализе и html agility pack, и я пробовал, но я не знаю, как использовать html agility pack для своих нужд.

Если кто-нибудь знает, то приведите мне пример, если это возможно

Редактировать :

Можно ли проанализировать html-таблицу, например, если мы хотим извлечь только данные с определенными именами столбцов?Например, есть 4 столбца name, address, phno, и я хочу извлечь только данные name и address.

Это было полезно?

Решение

Пример этого есть на дискуссионных форумах здесь.Прокрутите немного вниз, чтобы увидеть ответ в таблице.Я действительно хотел бы, чтобы они предоставили лучшие образцы, которые было бы легче найти.

Редактировать:Чтобы извлечь данные из определенных столбцов, вам нужно было бы сначала найти <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
}

Редактировать 2:Если вы не знаете индексов столбцов, вы могли бы сделать все это следующим образом.Я этого не тестировал.

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
        }
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top