Evita que HTMLAgilityPack conecte palabras cuando utiliza InnerText

c# html-agility-pack

Pregunta

Estoy tratando de hacer una tarea simple de obtener texto de un documento HTML. Así que estoy usando HTMLdoc.DocumentNode.InnerText para eso. El problema es que en algunos sitios no se ponen espacios entre las palabras cuando están en etiquetas diferentes. En esos casos, el DocumentNode.InnerText conecta esas palabras en una sola y se vuelve inútil.

por ejemplo, estoy tratando de leer un sitio que contenga esa línea

<span>Ä°stanbul</span><ul><li><a href="i1.htm">Adana</a></li>

Estoy obteniendo "Ä ° stanbulAdana" que no tiene sentido.

No pude encontrar ninguna solución en la documentación de HTMLAgilityPack ni en Google

¿Me falta algo?

Gracias,

Respuesta aceptada

Eso debería ser bastante fácil de hacer.

const string html = @"<span>Ä°stanbul</span><ul><li><a href=""i1.htm"">Adana</a></li>";
var doc = new HtmlDocument();
doc.LoadHtml(html);
string result = string.Join(" ", doc.DocumentNode.Descendants()
  .Where(n => !n.HasChildNodes && !string.IsNullOrWhiteSpace(n.InnerText))
  .Select(n => n.InnerText));
Console.WriteLine(result); // prints "Ä°stanbul Adana"

Respuesta popular

Bueno, el fragmento de código se cuelga para este ejemplo:

const string html = @"<td><font size=""2"">abc </font><font size=""2"">(</font><font size=""2"">abc</font><font size=""2"">) </font><a href=""?query=abc"">abc</a>, abc<br><font size=""2"">abc </font>abc, <a href=""?query=abc"">abc</a>, abc, <a href=""?query=abc"">abc</a><br><font size=""2"">abc </font>abc abc, abc abc<br></td>";

No se cuelga sin la cláusula de unión (pero tampoco coloca espacios correctamente).



Related

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é