Использовать jsoup для анализа XML - запретить jsoup из "очистки" тегов <link>

В большинстве случаев у меня нет проблем с использованием jsoup для синтаксического анализа XML. Однако, если в документе XML есть теги <link>, jsoup изменит <link>some text here</link> на <link />some text here. Это делает невозможным извлечение текста внутри тега <link> с помощью селектора CSS.

Итак, как предотвратить jsoup от "очистки" тегов <link>?

Ответ 1

В jsoup 1.6.2 Я добавил режим парсера XML, который анализирует вход как есть, без применения правил анализа HTML5 ( содержимое элемента, структура документа и т.д.). Этот режим будет сохранять текст в теге <link> и разрешать его кратность и т.д.

Вот пример:

String xml = "<link>One</link><link>Two</link>";
Document xmlDoc = Jsoup.parse(xml, "", Parser.xmlParser());

Elements links = xmlDoc.select("link");
System.out.println("Link text 1: " + links.get(0).text());
System.out.println("Link text 2: " + links.get(1).text());

Возвращает:

Link text 1: One
Link text 2: Two

Ответ 2

Не хранить текст внутри элемента <link> - он недействителен. Если вам нужна дополнительная информация, сохраните ее внутри атрибутов HTML5 data-*. Я уверен, что jsoup не коснется его.

<link rel="..." data-city="Warsaw" />

Ответ 3

Для этого может быть обходной путь. Перед передачей XML в jsoup. Преобразовать XML файл, чтобы заменить все на какой-то фиктивный тег, и делать то, что вы хотите сделать.