Как получить XPath элемента в HTML в Java? - PullRequest
0 голосов
/ 12 октября 2018

Я хочу выполнить простую задачу, но я изо всех сил пытаюсь найти простое решение для этого: у меня есть HTML-код веб-страницы в строке (или файле), и я хотел бы создать XPath для данногоэлемент.(Например, я хотел бы получить XPath для элемента <a>)

Я пробовал разные решения, но постоянно сталкиваюсь с проблемами при правильном разборе html.Есть ли работающий очиститель HTML для Java, как этот?https://www.htmlwasher.com/ Это ЕДИНСТВЕННЫЙ функционирующий очиститель, который я обнаружил на данный момент, но это онлайн-инструмент.Благодаря этому я могу легко разобрать HTML-код и перейти к XPath.

В настоящее время я использую jOOX (https://github.com/jOOQ/jOOX) для генерации XPath:

Document document = $(html).document();
System.out.println($(document).find("a").xpath());

ЕслиHTML очищается с помощью предоставленного мною онлайн-инструмента, я могу сгенерировать правильный XPath. Мне нравится, как я мог бы взаимодействовать с jOOX, если бы только я мог правильно и программно проанализировать HTML. Знаете ли вы хороший способ разбора HTML? Iуже попробовал:

  • JSoup
  • Tagsoup
  • HtmlCleaner

Страница веб-сайта тестирования http://www.ansa.it.

РЕДАКТИРОВАТЬ : Сбой синтаксического анализа при некоторых распространенных проблемах синтаксического анализа HTML, таких как незакрытые теги (например, </img>), экранирование и т. Д.

Мне удалось "правильно" проанализировать HTML таким образом:

Document doc = Jsoup.parse(Jsoup.clean(html, Whitelist.relaxed())); doc.outputSettings().escapeMode(EscapeMode.xhtml) .syntax(Syntax.xml) .charset(StandardCharsets.UTF_8);

Дело в том, что теги типа <a href="cinema.shtml">Cinema</a> стали <a>Cinema</a>, поэтому я не могу выбрать их, используя их атрибуты, например, href. Как я могу решить эту новуюпроблема?

Я заметил, что некоторые ссылки все еще имеют свой href, и оните, которые указывают на другие сайты, такие как Facebook или Twitter.Может ли это быть связано?

1 Ответ

0 голосов
/ 13 октября 2018

решено :

Мне удалось заставить все работать следующим образом:

String html = getTheHTMLSomeWay();

Document doc = Jsoup.parse(Jsoup.clean(html, "http://base.uri", Whitelist.relaxed().preserveRelativeLinks(true)));
doc.outputSettings().escapeMode(EscapeMode.xhtml).syntax(Syntax.xml).charset(StandardCharsets.UTF_8);

org.w3c.dom.Document document = $(doc.html()).document();

System.out.println($(document).find("a[href='/your/relative/url']"));

С Jsoup я могу очистить HTMLпротив всех этих скучных незакрытых тэгов, недопустимых тэгов и т. д. Тогда я могу избежать всех неэкранированных символов (согласно xhtml ) и установить синтаксис xml .

Это может дать вам чистый HTML-код, который можно использовать с библиотекой jOOX .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...