9
votes

Analyse de la table HTML en C #

J'ai une page HTML qui contient une table et je veux analyser ce tableau en C # Formulaire Windows

http://www.mufap.com.pk/payout- reporter.php? onglet = 01

C'est la page Web que je veux analyser J'ai essayé xxx

J'ai essayé quelque chose comme ça, mais ça ne me donnerai pas de forme tabulaire comme je J'imprime simplement tous les tresss alors s'il vous plaît aidez-moi à ce que ce theX Désolé pour mon anglais.


0 commentaires

3 Réponses :


14
votes

Voulez-vous dire quelque chose comme ça? XXX


1 commentaires

ouais je veux montrer chaque cellule dans un contrôle ListView formaté comme table HTML dans la page Web



50
votes

en utilisant HTML Agility Pack

WebClient webClient = new WebClient();
string page = webClient.DownloadString("http://www.mufap.com.pk/payout-report.php?tab=01");

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(page);

List<List<string>> table = doc.DocumentNode.SelectSingleNode("//table[@class='mydata']")
            .Descendants("tr")
            .Skip(1)
            .Where(tr=>tr.Elements("td").Count()>1)
            .Select(tr => tr.Elements("td").Select(td => td.InnerText.Trim()).ToList())
            .ToList();


5 commentaires

Merci l.b. Après avoir retiré la [@ class = 'myData'], cela fonctionne comme code générique ... parfait ....


Si la table est une pagination, comment aller à la page suivante en raclant?


@Dark_knight Avez-vous vu ? Onglet = 01 dans l'URL?


Je viens de recevoir "Test Street \ Ttest Loc \ Ttest Town \ Ttest \ Ttest \ Ttest \ Ttest \ Ttest \ Ttest \ Ttest \ Ttest \ Ttest \ Ttest \ Ttest" Utilisation de cette chaîne (car seulement avoir une rangée) ne devrait pas être dans une liste imbriquée?


Travaillé pour moi. Vous pouvez utiliser "// Table [2]" pour obtenir le deuxième noeud de



2
votes

en retard à ce sujet, mais un moyen de faire ce que vous demandez utiliser l'utilisation du code de Vanilla C # simple peut être le suivant

/// <summary>
/// parses a table and returns a list containing all the data with columns separated by tabs
/// e.g.: records = getTable(doc, 0);
/// </summary>
/// <param name="doc">HtmlDocument to work with</param>
/// <param name="number">table index (base 0)</param>
/// <returns>list containing the table data</returns>
public List<string> getTableData(HtmlDocument doc, int number)
{
  HtmlElementCollection tables = doc.GetElementsByTagName("table");
  int idx=0;
  List<string> data = new List<string>();

  foreach (HtmlElement tbl in tables)
  {
    if (idx++ == number)
    {
      data = getTableData(tbl);
      break;
    }
  }
  return data;
}

/// <summary>
/// parses a table and returns a list containing all the data with columns separated by tabs
/// e.g.: records = getTable(getElement(doc, "table", "id", "table1"));
/// </summary>
/// <param name="tbl">HtmlElement table to work with</param>
/// <returns>list containing the table data</returns>
public List<string> getTableData(HtmlElement tbl)
{
  int nrec = 0;
  List<string> data = new List<string>();
  string rowBuff;

  HtmlElementCollection rows = tbl.GetElementsByTagName("tr");
  HtmlElementCollection cols;
  foreach (HtmlElement tr in rows)
  {
    cols = tr.GetElementsByTagName("td");
    nrec++;
    rowBuff = nrec.ToString();
    foreach (HtmlElement td in cols)
    {
      rowBuff += "\t" + WebUtility.HtmlDecode(td.InnerText);
    }
    data.Add(rowBuff);
  }

  return data;
}


0 commentaires