2012-03-08 26 views
6

Parece que no puedo cargar un archivo html local, utilizando la biblioteca Jsoup. O al menos no parece reconocerlo. Codifiqué el html exacto en el archivo local (como var 'html') y cuando cambio a ese en lugar de una entrada de archivo, el código funciona perfectamente. Pero el archivo se lee en ambas ocasiones.¿Cómo cargo un archivo html local en 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*/ 

resultado cuando:
doc Documento = Jsoup.parseBodyFragment (html)

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

resultado cuando:
doc Documento = Jsoup.parseBodyFragment (entrada)

The file can be read: true 
nothing! 

Respuesta

9

Su m istake supone que Jsoup.parseBodyFragment() sabe si le está pasando un nombre de archivo que contiene un marcado HTML o una cadena que contiene el marcado html.

Jsoup.parseBodyFragment(input) espera que input sea un String que contenga un marcado HTML, no un nombre de archivo.

para pedirle que analizar desde un archivo de utilizar el método JSoup.parse(File in, String charsetName) lugar:

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

Nop que no hizo el truco tampoco. –

+0

Actualización: en mi respuesta original pasé erróneamente la cadena '' input'' en lugar del '' File'' objeto '' in''. También tendrás que ajustar el código en un bloque '' try-catch'' para que funcione. – holygeek

+0

¡Gracias! El intercambio de un tipo de cadena a un archivo funcionó. –

Cuestiones relacionadas