c# - extraer solo el texto de la página usando HTMLAgilityPack
.net xpath (2)
Si /r /n
caracteres en la cadena final son el problema, puede eliminarlos después del hecho:
TempString.ToString().Replace("/r", "").Replace("/n", "");
Ok, soy realmente nuevo en las consultas XPath utilizadas en HTMLAgilityPack.
Así que consideremos esta página http://health.yahoo.net/articles/healthcare/what-your-favorite-flavor-says-about-you . Lo que quiero es extraer solo el contenido de la página y nada más.
Entonces, para eso, primero elimino las etiquetas de guiones y estilos.
Document = new HtmlDocument();
Document.LoadHtml(page);
TempString = new StringBuilder();
foreach (HtmlNode style in Document.DocumentNode.Descendants("style").ToArray())
{
style.Remove();
}
foreach (HtmlNode script in Document.DocumentNode.Descendants("script").ToArray())
{
script.Remove();
}
Después de eso estoy tratando de usar // text () para obtener todos los nodos de texto.
foreach (HtmlTextNode node in Document.DocumentNode.SelectNodes("//text()"))
{
TempString.AppendLine(node.InnerText);
}
Sin embargo, no solo no obtengo solo texto, también obtengo numerosos / r / n caracteres.
Por favor, necesito un poco de orientación a este respecto.
Si considera que los nodos de script
y style
solo tienen nodos de texto para niños, puede usar esta expresión XPath para obtener nodos de texto que no estén en script
o etiquetas de style
, para que no tenga que eliminar los nodos de antemano:
//*[not(self::script or self::style)]/text()
Puede excluir aún más los nodos de texto que son solo espacios en blanco utilizando normalize-space()
XPath:
//*[not(self::script or self::style)]/text()[not(normalize-space(.)="")]
o el más corto
//*[not(self::script or self::style)]/text()[normalize-space()]
Pero aún obtendrá nodos de texto que pueden tener espacios en blanco iniciales o finales. Esto se puede manejar en su aplicación como lo sugiere @ aL3891.