2010-08-17 5 views

Répondre

16

De cookbook jsoup: http://jsoup.org/cookbook/extracting-data/attributes-text-html

String html = "<p>An <a href='http://example.com/'><b>example</b></a> link.</p>"; 
Document doc = Jsoup.parse(html); 
String text = doc.body().text(); // "An example link" 
+0

comment exclure des éléments invisibles? (par exemple, display: none) – Ehsan

0

Eh bien, voici une méthode rapide j'ai jeté ensemble une fois. Il utilise des expressions régulières pour faire le travail. La plupart des gens seront d'accord que ce n'est pas une bonne façon de s'y prendre. SO, utilisez à vos risques et périls.

public static String getPlainText(String html) { 
    String htmlBody = html.replaceAll("<hr>", ""); // one off for horizontal rule lines 
    String plainTextBody = htmlBody.replaceAll("<[^<>]+>([^<>]*)<[^<>]+>", "$1"); 
    plainTextBody = plainTextBody.replaceAll("<br ?/>", ""); 
    return decodeHtml(plainTextBody); 
} 

Cela a été initialement utilisé dans mon wrapper pour l'API Stack Overflow. Donc, il a été testé uniquement sous un petit sous-ensemble de balises html.

+0

Hmmm ... pourquoi n'utilisez-vous pas une simple expression rationnelle: 'replaceAll (" <[^>] +> "," ")'? – Crozin

+0

@Crozin, eh bien, je me suis enseigné comment utiliser les back-références, je suppose. On dirait que le tien fonctionnerait probablement aussi. – jjnguy

+0

ça fait mal! -> http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags – sleeplessnerd

1

Utilisation des classes qui font partie du JDK:

import java.io.*; 
import java.net.*; 
import javax.swing.text.*; 
import javax.swing.text.html.*; 

class GetHTMLText 
{ 
    public static void main(String[] args) 
     throws Exception 
    { 
     EditorKit kit = new HTMLEditorKit(); 
     Document doc = kit.createDefaultDocument(); 

     // The Document class does not yet handle charset's properly. 
     doc.putProperty("IgnoreCharsetDirective", Boolean.TRUE); 

     // Create a reader on the HTML content. 

     Reader rd = getReader(args[0]); 

     // Parse the HTML. 

     kit.read(rd, doc, 0); 

     // The HTML text is now stored in the document 

     System.out.println(doc.getText(0, doc.getLength())); 
    } 

    // Returns a reader on the HTML data. If 'uri' begins 
    // with "http:", it's treated as a URL; otherwise, 
    // it's assumed to be a local filename. 

    static Reader getReader(String uri) 
     throws IOException 
    { 
     // Retrieve from Internet. 
     if (uri.startsWith("http:")) 
     { 
      URLConnection conn = new URL(uri).openConnection(); 
      return new InputStreamReader(conn.getInputStream()); 
     } 
     // Retrieve from file. 
     else 
     { 
      return new FileReader(uri); 
     } 
    } 
} 
Questions connexes