HTMLAgilityPack n'itère que tous les nœuds de texte

html-agility-pack

Question

Voici un extrait HTML et tout ce que je veux, c’est d’obtenir uniquement les nœuds de texte et de les itérer. SVP faites le moi savoir. Merci.

<div>
   <div>
      Select your Age:
      <select>
          <option>0 to 10</option>
          <option>20 and above</option>
      </select>
   </div>
   <div>
       Help/Hints:
       <ul>
          <li>This is required field.
          <li>Make sure select the right age.
       </ul>
      <a href="#">Learn More</a>
   </div>
</div>

Résultat:

  1. Sélectionnez votre âge:
  2. 0 à 10
  3. 20 ans et plus
  4. Aide / Conseils:
  5. Ce champ est obligatoire.
  6. Assurez-vous de choisir le bon âge.
  7. Apprendre encore plus

Réponse acceptée

Quelque chose comme ça:

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

    foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//text()[normalize-space(.) != '']"))
    {
        Console.WriteLine(node.InnerText.Trim());
    }

Va afficher ceci:

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

    foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//text()[normalize-space(.) != '']"))
    {
        Console.WriteLine(node.InnerText.Trim());
    }

Réponse populaire

J'ai testé la réponse de @Simon Mourier sur la page d'accueil de Google et obtenu beaucoup de CSS et de Javascript. J'ai donc ajouté un filtre supplémentaire pour le supprimer:

    public string getBodyText(string html)
    {
        string str = "";

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

        try
        {
            // Remove script & style nodes
            doc.DocumentNode.Descendants().Where( n => n.Name == "script" || n.Name == "style" ).ToList().ForEach(n => n.Remove());

            // Simon Mourier's Answer
            foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//text()[normalize-space(.) != '']"))
            {
                str += node.InnerText.Trim() + " ";
            }
        }
        catch (Exception)
        {
        }

        return str;
    }



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi