2012-03-08 18 views
6

Nie mogę załadować pliku lokalnego w html przy użyciu biblioteki Jsoup. A przynajmniej nie wydaje się, aby to rozpoznawać. Naprawiłem dokładnie html w lokalnym pliku (jako var 'html') i kiedy przełączyłem się na to zamiast na plik, kod działa idealnie. Ale plik jest czytany przy obu okazjach.Jak załadować lokalny plik html do 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*/ 

Wynik gdy:
doc dokument = Jsoup.parseBodyFragment (HTML)

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

Wynik gdy:
doc dokument = Jsoup.parseBodyFragment (wejście)

The file can be read: true 
nothing! 

Odpowiedz

9

Twój m istake zakłada, że ​​Jsoup.parseBodyFragment() wie, czy przekazujesz mu nazwę pliku zawierającego znacznik HTML lub ciąg zawierający znaczniki html.

Jsoup.parseBodyFragment(input) oczekuje, że input jest String, który zawiera znacznik HTML, a nie nazwę pliku.

zapytać go do analizowania z pliku należy użyć metody JSoup.parse(File in, String charsetName) Zamiast:

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

Nope, że nie rade albo. –

+0

Aktualizacja: w mojej oryginalnej odpowiedzi błędnie przekazałem ciąg '' input'' zamiast '' File'' object '' in''. Musisz również zawinąć kod w bloku '' try-catch'', aby działał. – holygeek

+0

Dziękujemy! Wymiana z typu String na plik działała czarująco. –

Powiązane problemy