J’ai l’obligation d’extraire tout le texte présent dans le du code HTML. Exemple d’entrée HTML: –
title This is a big title.
How are doing you? I am fine
Le résultat devrait être: –
This is a big title. How are doing you? I am fine
Je veux utiliser uniquement HtmlAgility à cette fin. Pas d’expressions régulières s’il vous plaît.
Je sais comment charger HtmlDocument puis en utilisant xquery comme ‘// body’, nous pouvons obtenir le contenu du corps. Mais comment puis-je supprimer le code HTML tel que je l’ai montré dans la sortie?
Merci d’avance 🙂
Vous pouvez utiliser InnerText
du corps:
ssortingng html = @" title This is a big title.
How are doing you? I am fine
"; HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(html); ssortingng text = doc.DocumentNode.SelectSingleNode("//body").InnerText;
Ensuite, vous voudrez peut-être réduire les espaces et les nouvelles lignes:
text = Regex.Replace(text, @"\s+", " ").Trim();
Notez cependant que, même si cela fonctionne dans ce cas, les balises telles que hello
ou
worldhelloworld
seront converties par InnerText
en helloworld
, ce qui supprime les balises. Il est difficile de résoudre ce problème, car l’affichage est souvent déterminé par le CSS, pas seulement par le balisage.
Pourquoi ne pas utiliser l’expression XPath '//body//text()'
pour sélectionner tous les nœuds de texte?
Normalement, pour l’parsing HTML, je recommanderais un parsingur HTML. Cependant, comme vous voulez supprimer toutes les balises html, une expression rationnelle simple devrait fonctionner.
Vous pouvez utiliser NUglify qui prend en charge l’extraction de texte à partir de HTML:
var result = Uglify.HtmlToText(" This is a text
"); Console.WriteLine(result.Code); // prints: This is a text
Comme il utilise un parsingur personnalisé HTML5, il devrait être assez robuste (particulièrement si le document ne contient aucune erreur) et est très rapide (aucune expression rationnelle n’est impliquée, mais un parsingur de descente récursif pur, plus rapide que HtmlAgilityPack et plus compatible avec les règles de GC)