Convertir HTML en texte brut en Java
J'ai besoin de convertir le HTML en texte brut. Ma seule exigence de mise en forme est à retenir de nouvelles lignes dans le texte en clair. De nouvelles lignes devraient être affichés non seulement dans le cas de <br>
mais d'autres balises, par exemple <tr/>
, </p>
conduit à une nouvelle ligne de trop.
Exemple de code HTML des pages de test sont les suivantes:
- http://www.particle.kth.se/~lindsey/JavaCourse/Book/Part1/Java/Chapter09/scannerConsole.html
- http://www.javadb.com/write-to-file-using-bufferedwriter
Noter que ce sont uniquement aléatoire Url.
J'ai essayé diverses bibliothèques (JSoup, Javax.swing, Apache utils) mentionnées dans les réponses aux cette question StackOverflow pour convertir HTML en texte brut.
Exemple à l'aide de JSoup:
public class JSoupTest {
@Test
public void SimpleParse() {
try {
Document doc = Jsoup.connect("http://www.particle.kth.se/~lindsey/JavaCourse/Book/Part1/Java/Chapter09/scannerConsole.html").get();
System.out.print(doc.text());
} catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Exemple avec HTMLEditorKit:
import javax.swing.text.html.*;
import javax.swing.text.html.parser.*;
public class Html2Text extends HTMLEditorKit.ParserCallback {
StringBuffer s;
public Html2Text() {}
public void parse(Reader in) throws IOException {
s = new StringBuffer();
ParserDelegator delegator = new ParserDelegator();
//the third parameter is TRUE to ignore charset directive
delegator.parse(in, this, Boolean.TRUE);
}
public void handleText(char[] text, int pos) {
s.append(text);
}
public String getText() {
return s.toString();
}
public static void main (String[] args) {
try {
//the HTML to convert
URL url = new URL("http://www.javadb.com/write-to-file-using-bufferedwriter");
URLConnection conn = url.openConnection();
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
String inputLine;
String finalContents = "";
while ((inputLine = reader.readLine()) != null) {
finalContents += "\n" + inputLine.replace("<br", "\n<br");
}
BufferedWriter writer = new BufferedWriter(new FileWriter("samples/testHtml.html"));
writer.write(finalContents);
writer.close();
FileReader in = new FileReader("samples/testHtml.html");
Html2Text parser = new Html2Text();
parser.parse(in);
in.close();
System.out.println(parser.getText());
}
catch (Exception e) {
e.printStackTrace();
}
}
}
Est-il question?
Avez-vous vu les dates? Cette question est plus ancienne que celle qui leur surnommé le double de!
Ouais! Le double question ne s'applique qu'à Android.
JSoup a une bonne solution, voir: stackoverflow.com/a/44064930/381161
Avez-vous vu les dates? Cette question est plus ancienne que celle qui leur surnommé le double de!
Ouais! Le double question ne s'applique qu'à Android.
JSoup a une bonne solution, voir: stackoverflow.com/a/44064930/381161
OriginalL'auteur brayne | 2010-10-12
Vous devez vous connecter pour publier un commentaire.
Votre analyseur d'ajouter un texte de contenu et des retours à la ligne pour un StringBuilder.
OriginalL'auteur Sam Barnum
Je suppose que vous pourriez utiliser le ParserCallback.
Vous devez ajouter le code pour prendre en charge les balises qui nécessitent un traitement spécial. Il y a:
rappels qui devrait vous permettre de vérifier les balises que vous souhaitez surveiller, puis ajouter un caractère de saut de ligne à votre tampon.
bien sûr que non, parce que les retours à la ligne ne sont pas significatives dans la plupart des contextes en HTML, donc, bien sûr, l'analyseur de sortie ne rendra pas compte de leur présence dans la source HTML.
OriginalL'auteur camickr
Bâtiment sur votre exemple, avec un soupçon de code html en texte brut? message:
OriginalL'auteur PhiLho
Vous pouvez utiliser XSLT pour ce but. Jetez un oeil à ce lien qui répond à un problème similaire.
Espère qu'il est utile.
OriginalL'auteur Suresh Kumar
Je voudrais utiliser SAXOPHONE. Si votre document n'est pas bien formée XHTML, je voudrais le transformer avec JTidy.
OriginalL'auteur mschonaker
JSoup n'est pas FreeMarker (ou tout autre client/non-balise HTML) compatibles. Considérez cela comme la plus pure solution pour convertir Html en texte brut.
http://stackoverflow.com/questions/1518675/open-source-java-library-for-html-to-text-conversion/1519726#1519726
Mon code:
OriginalL'auteur John Camerin