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(); } }
Mon fichier s'appelle new.html c'est le code source d'un site web auquel je dois enlever les balises ainsi que leur contenu.
Il faut ajouter les imports nécessaires :
- Il faut ajouter les imports nécessaires :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 import java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; import java.nio.file.Files; import java.nio.file.Paths; import java.util.stream.Collectors;- Pour télécharger jsoup
https://jsoup.org/download, le core suffit, penser à l'ajouter au classpath lors du lancement de la commande (par le paramètre -cp) et penser aux imports des classes jsoup dans le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 import org.jsoup.Jsoup; import org.jsoup.nodes.Element;
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.
Je n'arrive pas à obtenir de résultat. Je dois mettre le fichier un fichier txt en parametre dans htmlToText dans le main?
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
29
30
31
32
33
34
35
36
37
38 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 java.io.IOException; import java.io.PrintWriter; import java.io.StringWriter; import java.nio.file.Files; import java.nio.file.Paths; import java.util.stream.Collectors; import org.jsoup.Jsoup; import org.jsoup.nodes.Element; 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(); } public static void main(String[] args){ htmlToText("test.txt"); } }
Ce code, c'est le code que j'ai donné comme exemple pour lire un fichier appelé new.html se trouvant dans le dossier de travail de l'application !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public static void exemple() { try { String text = htmlToText(Files.lines(Paths.get("new.html")).collect(Collectors.joining())); } catch (IOException e) { e.printStackTrace(); } }
Ta méthode main, ci-dessous, appelle directement une méthode qui prend un String contenant du html pour la transformer en texte débalisé (suivant une règle particulière, qui est de prendre tous les contenus des paragraphes) :
Forcément, test.txt c'est pas du html, c'est du texte, sans balises !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public static void main(String[] args){ htmlToText("test.txt"); }
Il faut que tu écrives dans la méthode main un code similaire à ce que j'ai mis dans la méthode exemple, avec le chemin de fichier qui correspond à ton fichier.
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.
Partager