Пакет гибкости HTML

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

Но я плохо знаком с парсингом и пакетом гибкости HTML, и я попробовал, но я не знаю, как использовать пакет гибкости HTML для моей потребности.

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

РЕДАКТИРОВАНИЕ:

Действительно ли возможно проанализировать таблицу HTML как то, если мы хотим извлечь данные решительных имен столбцов только? Как существует имя на 4 столбца, адрес, phno, и я хочу извлечь только данные имени и адреса.

6
задан Harikrishna 12 March 2010 в 05:21
поделиться

1 ответ

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

РЕДАКТИРОВАТЬ: Чтобы извлечь данные из определенных столбцов, вам нужно сначала найти теги , которые соответствуют нужным столбцам, и запомнить их индексы. Затем вам нужно будет найти теги для тех же индексов. Предполагая, что вы знаете индексы столбцов, вы можете сделать что-то вроде этого:

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
        }
    }
}
6
ответ дан 17 December 2019 в 02:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: