Htmlagilitypack - Consigue todo el texto + enlaces dentro del texto

c# html-agility-pack

Pregunta

Tengo un método que extrae bloques de texto que tienen más de XX cantidad de palabras. El problema es que no devolverá los enlaces dentro de ese texto.

Mi método:

public string getAllTextHTML(string _html)
{
  string _allText = "";
  try
  {
    HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();
    document.LoadHtml(_html);

    document.DocumentNode.Descendants()
      .Where(n => n.Name == "script" || n.Name == "style")
      .ToList()
      .ForEach(n => n.Remove());

    RemoveComments(document.DocumentNode);

    var root = document.DocumentNode;
    var sb = new StringBuilder();
    foreach (var node in root.DescendantNodesAndSelf())
    {
      if (!node.HasChildNodes)
      {
        string text = node.InnerHtml;

        if (!string.IsNullOrEmpty(text))
        {
          int antalOrd = WordCounting.CountWords1(text);

          if (antalOrd > 25)
          {
            text = System.Web.HttpUtility.HtmlDecode(text);
            sb.AppendLine(text.Trim());
          }  
        } 
      }
    }

    _allText = sb.ToString();
  }
  catch (Exception)
  {
  }

  _allText = System.Web.HttpUtility.HtmlDecode(_allText);
  return _allText;
}

¿Cómo podría hacer que esto también me trajera los enlaces dentro del texto?

Respuesta popular

Supongo que la siguiente línea hace un problema:

if (!node.HasChildNodes)

porque, el enlace (ancla) es la etiqueta htlm y excluye las etiquetas html que tienen etiqueta de ancla como elemento secundario.

Aquí hay un ejemplo simple que devuelve enlace:

String html = "<p>asdf<a href='#'>Test</a>asdfasd</p>";

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

String p = (from x in doc.DocumentNode.Descendants()
            where x.Name == "p"
            select x.InnerHtml).FirstOrDefault();


Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué