Domanda

Voglio analizzare la tabella html usando il pacchetto agility html. Voglio estrarre solo alcuni dati di colonna predefiniti dalla tabella.

Ma sono nuovo nell'analisi e nell'agility pack html e ho provato ma non so come usare il pacchetto di agilità html per le mie necessità.

Se qualcuno lo sa, dammi un esempio se possibile

MODIFICARE :

È possibile analizzare la tabella html come se volessimo estrarre solo i dati dei nomi delle colonne decise? Come ci sono 4 colonne nome, indirizzo, phno e voglio estrarre solo i dati di nome e indirizzo.

Risposta accettata

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

EDIT: per estrarre i dati da colonne specifiche dovresti prima trovare i tag <th> che corrispondono alle colonne che vuoi e ricordare i loro indici. Dovresti quindi trovare i tag <td> per gli stessi indici. Supponendo che tu conosca gli indici delle colonne potresti fare qualcosa del genere:

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 conosci gli indici delle colonne potresti fare il 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
        }
    }
}


Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché