parser parse htmlagilitypack agility c# html-agility-pack

c# - parse - htmlagilitypack selectnodes



htmlagilitypack-¿Desea eliminar el script y el estilo? (3)

Estoy usando el siguiente método para extraer texto de html:

public string getAllText(string _html) { string _allText = ""; try { HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument(); document.LoadHtml(_html); var root = document.DocumentNode; var sb = new StringBuilder(); foreach (var node in root.DescendantNodesAndSelf()) { if (!node.HasChildNodes) { string text = node.InnerText; if (!string.IsNullOrEmpty(text)) sb.AppendLine(text.Trim()); } } _allText = sb.ToString(); } catch (Exception) { } _allText = System.Web.HttpUtility.HtmlDecode(_allText); return _allText; }

El problema es que también obtengo etiquetas de script y estilo.

¿Cómo podría excluirlos?


Algunas respuestas excelentes, System.Linq es útil!

Para un enfoque no basado en Linq:

private HtmlAgilityPack.HtmlDocument RemoveScripts(HtmlAgilityPack.HtmlDocument webDocument) { // Get all Nodes: script HtmlAgilityPack.HtmlNodeCollection Nodes = webDocument.DocumentNode.SelectNodes("//script"); // Make sure not Null: if (Nodes == null) return webDocument; // Remove all Nodes: foreach (HtmlNode node in Nodes) node.Remove(); return webDocument; }


Puedes hacerlo usando la clase HtmlDocument :

HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(input); doc.DocumentNode.SelectNodes("//style|//script").ToList().ForEach(n => n.Remove());


HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); doc.LoadHtml(html); doc.DocumentNode.Descendants() .Where(n => n.Name == "script" || n.Name == "style") .ToList() .ForEach(n => n.Remove());