Comment obtenir le nombre de tables dans un fichier html avec C # et html-agility-pack

c# html html-agility-pack html-parsing

Question

Ceci est une question pour les débutants, veuillez donc fournir un code fonctionnel.

Comment compter les tables dans un fichier HTML à l'aide de C # et du pack HTML-agility?

(J'aurai besoin d'obtenir les valeurs de tables spécifiques dans un fichier html en fonction du nombre de tables. Je vais ensuite effectuer quelques calculs sur les valeurs récupérées.)

Voici un exemple de fichier avec trois tables pour votre commodité:

<html>
<head>
<title>Tables</title>
</head>
<body>
<table border="1">
  <tr>
    <th>Name</th>
    <th>Phone</th>
    <th>City</th>
    <th>Number</th>
  </tr>
  <tr>
    <td>Scott</td>
    <td>555-2345</td>
    <td>Chicago</td>
    <td>42</td>
  </tr>
  <tr>
    <td>Bill</td>
    <td>555-1243</td>
    <td>Detroit</td>
    <td>23</td>
  </tr>
  <tr>
    <td>Ted</td>
    <td>555-3567</td>
    <td>Columbus</td>
    <td>9</td>
  </tr>
</table>
<p></p>
<table border="1">
  <tr>
    <th>Name</th>
    <th>Year</th>
  </tr>
  <tr>
    <td>Abraham</td>
    <td>1865</td>
  </tr>
  <tr>
    <td>Martin</td>
    <td>1968</td>
  </tr>
  <tr>
    <td>John</td>
    <td>1963</td>
  </tr>
</table>
<p></p>
<table border="1">
  <tr>
    <th>Animal</th>
    <th>Location</th>
    <th>Number</th>
  </tr>
  <tr>
    <td>Tiger</td>
    <td>Jungle</td>
    <td>8</td>
  </tr>
  <tr>
    <td>Hippo</td>
    <td>River</td>
    <td>4</td>
  </tr>
  <tr>
    <td>Camel</td>
    <td>Desert</td>
    <td>3</td>
  </tr>
</table>
</body>
</html>

Si vous le souhaitez, MONTREZ comment envoyer les résultats dans un nouveau fichier texte.

Merci!

Réponse acceptée

Quelque chose comme ça:

HtmlDocument doc = new HtmlDocument();
doc.Load(myTestFile);

// get all TABLE elements recursively
int count = doc.DocumentNode.SelectNodes("//table").Count;

// output to a text file
File.WriteAllText("output.txt", count.ToString());

Réponse populaire

Je pense que cela peut être un point de départ

var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);

var tables = doc.DocumentNode.Descendants("table");
int tablesCount = tables.Count();

foreach (var table in tables)
{
    var rows = table.Descendants("tr")
                    .Select(tr => tr.Descendants("td").Select(td => td.InnerText).ToList())
                    .ToList();

    foreach(var row in rows)
        Console.WriteLine(String.Join(",", row));
}


Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow