2010-03-11 1 views
6

voglio analizzare la tabella HTML usando HTML agilità confezione. Voglio estrarre solo alcuni dati di colonna predefiniti dalla tabella.HTML Agility pacchetto

ma io sono una novità per l'analisi e l'agilità html pacco e ho provato, ma non so come usare l'agilità pacchetto html per il mio bisogno.

se qualcuno sa poi mi danno esempio, se possibile

EDIT:

E 'possibile analizzare tabella HTML come se vogliamo estrarre solo i dati i nomi delle colonne decisi? Come ci sono 4 colonne nome, indirizzo, phno e voglio estrarre solo i dati di nome e indirizzo.

+0

@Harikrishna - avete un piccolo campione della struttura della tabella? –

+0

Per ulteriori informazioni per estrarre i dati dai dati HTML usando Agilità pacchetto html: http://stackoverflow.com/questions/2431652/html-agility-pack – Harikrishna

risposta

6

V'è un esempio di che nei forum di discussione here. Scorri verso il basso un po 'per vedere la risposta del tavolo. Vorrei che avrebbero fornito campioni migliori che erano più facili da trovare.

MODIFICA: Per estrarre i dati da colonne specifiche, devi prima trovare i tag <th> corrispondenti alle colonne che desideri e ricordare i loro indici. Dovresti quindi trovare i tag <td> per gli stessi indici. Supponendo che conoscete gli indici delle colonne si potrebbe fare qualcosa di simile:

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: Se non si conoscono gli indici delle colonne si poteva fare tutto in questo modo. Non ho provato questo.

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 - E 'lo stesso tipo di dati in ogni tabella? Vuoi estrarre le stesse colonne da tutte le tabelle? Vuoi solo trovare una tabella specifica? Aiutami un po 'qui. Continuo a provare a rispondere e quindi fornisci ulteriori informazioni. Prendiamo tutte le informazioni là fuori. –

+0

@ Mike Due Sir..Okay dispiace per questo ... Come nella pagina web ci sono più di un tag tavolo, ma voglio estrarre i dati da una sola tabella che hanno nome della colonna come avevamo definito come l'indirizzo e telefono no. L'altro tag di tabella è per altre informazioni e non utile. – Harikrishna

+0

@ Mike Due Sir..There sono molti pagina web con più di un table.And da ogni pagina web che voglio estrarre i dati solo per una tabella che ha il nome della colonna di nessun telefono e indirizzo. – Harikrishna