copains Je dois analyser la description à partir de l'URL, où le contenu analysé contient peu de balises HTML. Comment le convertir en texte brut?.
Se débarrasser des balises HTML est simple:
// replace all occurrences of one or more HTML tags with optional
// whitespace inbetween with a single space character
String strippedText = htmlText.replaceAll("(?s)<[^>]*>(\\s*<[^>]*>)*", " ");
Mais malheureusement, les exigences ne sont jamais aussi simples:
Généralement, les éléments <p>
et <div>
nécessitent une manipulation séparée, il peut y avoir des blocs cdata avec des caractères >
(par exemple, javascript) qui gâchent la regex, etc.
Vous pouvez utiliser cette seule ligne pour supprimer les balises html et les afficher sous forme de texte brut.
htmlString=htmlString.replaceAll("\\<.*?\\>", "");
Utilisez un analyseur HTML comme htmlCleaner
Pour une réponse détaillée: Comment supprimer une balise HTML en Java
Je vous recommande d'analyser le code HTML brut avec jTidy , ce qui devrait vous donner un résultat sur lequel vous pouvez écrire des expressions xpath. C'est le moyen le plus robuste que j'ai trouvé de gratter le HTML.
Si vous souhaitez analyser comme un affichage de navigateur, utilisez:
import net.htmlparser.jericho.*;
import Java.util.*;
import Java.io.*;
import Java.net.*;
public class RenderToText {
public static void main(String[] args) throws Exception {
String sourceUrlString="data/test.html";
if (args.length==0)
System.err.println("Using default argument of \""+sourceUrlString+'"');
else
sourceUrlString=args[0];
if (sourceUrlString.indexOf(':')==-1) sourceUrlString="file:"+sourceUrlString;
Source source=new Source(new URL(sourceUrlString));
String renderedText=source.getRenderer().toString();
System.out.println("\nSimple rendering of the HTML document:\n");
System.out.println(renderedText);
}
}
J'espère que cela aidera à analyser la table également dans le format du navigateur.
Merci, Ganesh
J'avais besoin d'une représentation en texte brut de certains fichiers HTML comprenant des balises FreeMarker. Le problème m'a été confié avec une solution JSoup, mais JSoup échappait aux balises FreeMarker, rompant ainsi la fonctionnalité. J'ai aussi essayé htmlCleaner (sourceforge), mais cela laissait l'en-tête HTML et le contenu du style (balises supprimées). http://stackoverflow.com/questions/1518675/open-source-Java-library-for-html-to-text-conversion/1519726#1519726
Mon code:
return new net.htmlparser.jericho.Source(html).getRenderer().setMaxLineLength(Integer.MAX_VALUE).setNewLine(null).toString();
La maxLineLength
garantit que les lignes ne sont pas encapsulées artificiellement à 80 caractères. La setNewLine(null)
utilise le même caractère de nouvelle ligne que la source.