Как загрузить локальный HTML-файл в Jsoup? - PullRequest
7 голосов
/ 08 марта 2012

Я не могу загрузить локальный HTML-файл, используя библиотеку Jsoup.Или, по крайней мере, кажется, что он этого не признает.Я жестко закодировал точный html в локальном файле (как var 'html'), и когда я переключаюсь на него вместо ввода файла, код работает отлично.Но файл читается в обоих случаях.

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*/

Результат, когда:
Документ doc = Jsoup.parseBodyFragment (html)

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

Результат, когда:
Документ doc = Jsoup.parseBodyFragment (вход)

The file can be read: true
nothing!

1 Ответ

11 голосов
/ 08 марта 2012

Ваша ошибка в предположении, что Jsoup.parseBodyFragment() знает, передаете ли вы ему имя файла, содержащее разметку html, или строку, содержащую разметку html.

Jsoup.parseBodyFragment(input) ожидает, что input - это String, который содержит html-разметку, а не имя файла.

Чтобы попросить его разобрать файл, используйте метод Jsoup.parse(File in, String charsetName):

File in = new File(input);
Document doc = Jsoup.parse(in, null);
...