Question

Je veux analyser la table HTML en utilisant l'agilité pack html. Je veux extraire seulement quelques données de colonne prédéfinies de la table.

Mais je suis nouveau pack d'analyse syntaxique et l'agilité html et je l'ai essayé, mais je ne sais pas comment utiliser le pack d'agilité html pour mes besoins.

Si quelqu'un sait me donner l'exemple alors si possible

EDIT:

Est-il possible d'analyser la table html comme si l'on veut extraire les données des noms de colonne décidé seulement? Comme il y a 4 colonnes nom, adresse, Phno et je veux extraire uniquement les données de nom et adresse.

Était-ce utile?

La solution

Il est un exemple de cela dans les forums de discussion . Faites descendre un peu pour voir la réponse de la table. Je ne veux qu'ils fournir de meilleurs échantillons qui étaient plus faciles à trouver.

EDIT: Pour extraire les données de colonnes spécifiques que vous devez trouver d'abord les balises <th> qui correspondent aux colonnes que vous voulez et se souvenir de leurs index. Vous devrez alors trouver les balises <td> pour les mêmes indices. En supposant que vous connaissez les indices des colonnes que vous pourriez faire quelque chose comme ceci:

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: Si vous ne connaissez pas les index des colonnes que vous pouvez faire tout ça comme ça. Je n'ai pas testé.

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
        }
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top