2010-03-11 5 views
6

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

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

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

EDIT:

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

+0

@Harikrishna - у вас есть небольшой образец структуры таблицы? –

+0

Для получения дополнительной информации для извлечения данных из html-данных с помощью html-пакета Agility: http://stackoverflow.com/questions/2431652/html-agility-pack – Harikrishna

ответ

6

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

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 
     } 
    } 
} 
+0

@Harikrishna - Это тот же самый тип данных в каждой таблице? Вы хотите извлечь одни и те же столбцы из всех таблиц? Вы хотите найти только одну таблицу? Помогите мне немного здесь. Я продолжаю пытаться ответить, а затем вы предоставляете больше информации. Давайте получим всю информацию. –

+0

@Mike Two Sir..Okay извините за это ... Как на веб-странице есть более одного тега таблицы, но я хочу извлечь данные только из одной таблицы, у которой есть имя столбца, как мы определили как адрес и номер телефона. Другой тег для другой информации и не полезен. – Harikrishna

+0

@Mike Two Sir .. Есть много веб-страниц с более чем одной таблицей. И с каждой веб-страницы я хочу извлечь данные только для одной таблицы, в которой есть имя столбца телефона no и address. – Harikrishna