Bonjour,
Je cherche à supprimer toutes les balises d'un fichier HTML avec JAVA. Seriez-vous comment faire?
Merci d'avance,
Owl___
Bonjour,
Je cherche à supprimer toutes les balises d'un fichier HTML avec JAVA. Seriez-vous comment faire?
Merci d'avance,
Owl___
Salut, tu peux utiliser une expression régulière.
Salut,
On pourrait le faire avec une expression régulière, pour du HTML de base, sans JavaScript. Et encore, il faudra éventuellement un code préparatoire pour récupérer le body, parce que je suppose qu'on ne veut pas les contenus de la balise <head>. Et traiter les conversions des entités. Etc.
Le plus simple est d'utiliser un parser. Par exemple, avec la bibliothèque JSoup, à partir d'une String qui contient du HTML :
Tu voudras peut-être même avoir les différents paragraphes, avec retour à la ligne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public static String htmlToString(String html) { return Jsoup.parse(html).body().text(); }
Voire même obtenir un texte structuré, avec les listes, les puces, les tableaux alignés, tout ça est possible relativement facilement avec JSoup.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public static String htmlToText(String html) { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); Jsoup.parse(html).body().select("p").stream().map(Element::text).forEach(pw::println); return sw.toString(); }
Ou seulement traiter chaque élément séparément d'ailleurs.
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
Bonjour,
Merci pour votre réponse. Je dois récupérer le fichier html comme cela avec un FileReader?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 import java.io.*; class new30{ FileReader html; html = new FileReader("new.html"); public static String htmlToText(string html) { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(); Jsoup.parse(html).body().select("p").stream().map(Element::text).forEach(pw::println); return sw.toString(); } }
En Java 13,
Il te suffit d'utiliser la méthode java.nio.file.Files.readString() :
Avant, on peut utiliser un FileReader/BufferedReader, via Files.newBufferedReader(), mais le plus simple est de récupérer les lignes et les joindre :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 public static void exemple() { try { String text = htmlToText(Files.readString(Paths.get("/chemin/fichier.html"))); } catch (IOException e) { e.printStackTrace(); } } public static String htmlToText(String html) { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); Jsoup.parse(html).body().select("p").stream().map(Element::text).forEach(pw::println); return sw.toString(); }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 try { String text = htmlToText(Files.lines(Paths.get("/chemin/fichier.html")).collect(Collectors.joining())); } catch (IOException e) { e.printStackTrace(); }
L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
Nouveau sur le forum ? Consultez Les Règles du Club.
J'obtiens les erreurs ci-jointes dans la capture. Une chose aussi quelle est la bibliothèque pour Jsoup?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 import java.io.*; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.Files; import java.io.IOException; import java.io.IOException; //import org.jsoup.Jsoup; //import org.jsoup.nodes.Document; public class new30{ public static void exemple() { try { String text = htmlToText(Files.lines(Paths.get("new.html")).collect(Collectors.joining())); } catch (IOException e) { e.printStackTrace(); } } public static String htmlToText(String html) { StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); Jsoup.parse(html).body().select("p").stream().map(Element::text).forEach(pw::println); return sw.toString(); } }
Partager