2012-03-08 7 views
6

Je n'arrive pas à charger dans un fichier html local, en utilisant la bibliothèque Jsoup. Ou à tout le moins, il ne semble pas le reconnaître. J'ai codé en dur le code html exact dans le fichier local (comme le var 'html') et quand je passe à cela au lieu d'une entrée de fichier, le code fonctionne parfaitement. Mais le fichier est lu à chaque fois.Comment charger un fichier html local dans Jsoup?

import java.io.File; 
import org.jsoup.Jsoup; 
import org.jsoup.nodes.Document; 
import org.jsoup.nodes.Element; 
import org.jsoup.select.Elements; 


public class FileHtmlParser{ 

public String input; 


//constructor 
public FileHtmlParser(String inputFile){input = inputFile;} 


//methods 
public FileHtmlParser execute(){ 

    File file = new File(input); 
    System.out.println("The file can be read: " + file.canRead()); 

    String html = "<html><head><title>First parse</title><meta>106</meta> <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /></head>" 
       + "<body><p>Parsed HTML into a doc.</p>" + 
       "" + 
       "<div id=\"navbar\">this is the div</div></body></html>"; 
      Document doc = Jsoup.parseBodyFragment(input); 




    Elements content = doc.getElementsByTag("div"); 
    if(content.hasText()){System.out.println("result is " + content.outerHtml());} 
    else System.out.println("nothing!"); 


    return this; 
} 

}/*endOfClass*/ 

Résultat lorsque:
Document doc = Jsoup.parseBodyFragment (html)

The file can be read: true 
result is <div id="navbar"> 
this is the div 
</div> 

Résultat lorsque:
Document doc = Jsoup.parseBodyFragment (entrée)

The file can be read: true 
nothing! 

Répondre

9

Votre m istake est en supposant que Jsoup.parseBodyFragment() sait si vous lui passez un nom de fichier qui contient le balisage html ou une chaîne qui contient le balisage html.

Jsoup.parseBodyFragment(input) s'attend à ce que input est un String qui contient le balisage html, pas un nom de fichier.

pour lui demander d'analyser à partir d'un fichier utilisez plutôt la méthode JSoup.parse(File in, String charsetName):

File in = new File(input); 
Document doc = JSoup.parse(in, null); 
+0

Non qui ne soit fait l'affaire. –

+0

Mise à jour: dans ma réponse originale, j'ai passé par erreur la chaîne '' input'' à la place de l'objet '' File'' '' in''. Aussi, vous devrez envelopper le code dans un bloc '' try-catch'' pour le faire fonctionner. – holygeek

+0

Merci! Le swap d'une chaîne à un type de fichier a travaillé un charme. –

Questions connexes