Использует ли Jsoup базовый тег html-документа для автоматического разрешения относительного пути

Насколько я понимаю, синтаксический анализатор jsoup позволяет работать с относительными ссылками, если при создании экземпляра синтаксического анализатора указан базовый URI.

Теперь предположим, что документ определяет базовый тег с URI, который отличается от URI страницы. Этот URI не может быть известен заранее.

Каково поведение парсера? Обнаруживает ли он тег автоматически и применяет ли его ко всему документу? Или нам нужно сначала проанализировать документ, чтобы обнаружить базовый тег, а затем повторно проанализировать его с обнаруженным значением в качестве базового uri?

Заранее спасибо Кой


person koj    schedule 11.12.2012    source источник


Ответы (1)


Jsoup обнаружит тег <base> и применит его по всему документу. При разрешении относительных ссылок URI базового тега имеет приоритет над URI, предоставленным синтаксическому анализатору. Вам не нужно анализировать документ дважды. Например:

Document doc = Jsoup.parse(
    "<a href='/one/'>One</a>" +
    "<base href='http://example.com/' />" +
    "<a href='/two/'>Two</a>");
Elements els = doc.select("a");
for (Element e: els) {
    System.out.println(e.attr("abs:href"));
}

дает:

http://example.com/one/
http://example.com/two/
person Jonathan Hedley    schedule 11.12.2012
comment
Как насчет случая, когда указанный базовый URI, установленный для синтаксического анализатора, отличается от значения базового тега? Значение базового тега вытесняет другое? - person koj; 11.12.2012
comment
Да, URI базового тега имеет приоритет над базовым URI, предоставленным синтаксическому анализатору, в соответствии со спецификацией разрешения относительных URI. - person Jonathan Hedley; 11.12.2012