Я попробовал приведенный выше код, но с модификацией:
public class Main {
public static void main(String[] args) {
String html = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n" +
"<html xmlns=\"http://www.w3.org/1999/xhtml\">\n" +
"<head>\n" +
" <title>404</title>\n" +
"</head>\n" +
"<body>\n" +
"</body>\n" +
"</html>\n";
Document document = Jsoup.parse(html);
System.out.println(document.select("head > title").text());
System.out.println(document.select("title").text());
System.out.println(document.select("body > title").text());
}
}
Здесь я определяю строку под названием "html", и я инициализирую ее с помощью HTML-кода, которым вы поделились через OneDrive, и он работает какожидается.Если вы выбираете тег заголовка, а затем вложенный тег заголовка, он печатает 404 и так далее, если вы просто выбираете тег заголовка.Но если вы попытаетесь выбрать тег body, а затем вложенный тег title, он просто напечатает пустой, потому что он не существует.
Ошибка, которая у вас возникла, я думаю, это потому, что метод импорта HTML, потому что он изменяет свою структуру, или чтение документа неверно.Поэтому проверьте этот фрагмент кода и подумайте о его замене:
String s = FileUtils.readFileToString(new File(Test.class.getResource("test.html").getFile()), StandardCharsets.UTF_8);
Чтобы решить вашу проблему в этом конкретном случае, вы можете просто выбрать тег заголовка, поскольку он будет уникальным во всем HTML.При выборе JSOUP вам не нужно выбирать каждый элемент сверху, пока тот элемент, который вы действительно хотите выбрать, вы можете выбрать его напрямую, если у него есть какой-либо идентификатор.
Если вам нужно что-либо, связанное с выбором CSSиз JSOUP, взгляните на Примеры синтаксиса выбора JSOUP CSS .
Надеюсь, это помогло вам!Если вам нужно что-то еще, не стесняйтесь спрашивать!