Comment puis-je extraire juste du texte du HTML

c# html-agility-pack

Question

J'ai l'obligation d'extraire tout le texte présent dans le <body> du code HTML. Exemple d'entrée HTML: -

<html>
    <title>title</title>
    <body>
           <h1> This is a big title.</h1>
           How are doing you?
           <h3> I am fine </h3>
           <img src="abc.jpg"/>
    </body>
</html>

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 comme je l'ai montré dans la sortie?

Merci d'avance :)

Réponse acceptée

Vous pouvez utiliser InnerText du corps:

string html = @"
<html>
    <title>title</title>
    <body>
           <h1> This is a big title.</h1>
           How are doing you?
           <h3> I am fine </h3>
           <img src=""abc.jpg""/>
    </body>
</html>";

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);
string 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<br>world ou hello<i>world</i> seront converties par InnerText en helloworld , ce qui supprimera 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.


Réponse populaire

Pourquoi ne pas utiliser l'expression XPath '//body//text()' pour sélectionner tous les nœuds de texte?



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow