получение текста элемента в jsoup - PullRequest
1 голос
/ 17 февраля 2012

Когда я использовал jsoup для анализа некоторых html-файлов, таких как "google.com", я столкнулся с проблемой при получении текста элемента.

Например, в этом элементе div с использованием text функция, слова «Программы» и «Бизнес» связаны друг с другом, что я считаю неправильным:

<div id="fll" style="margin:19px auto;text-align:center">
   <a href="/intl/en/ads/">Advertising&nbsp;Programs</a>
   <a href="/services/">Business Solutions</a>
   <a href="https://plus.google.com/" rel="publisher">+Google</a>
   <a href="/intl/en/about.html">About Google</a>
</div>

Вы можете проверить мою заявку с помощью этого кода:

URL url = new URL("http://www.google.com");
Document document = Jsoup.parse(url, 10000);
Element element = document.select("div[id=fll]").first();
System.out.println(element.text());

Вывод будет:

Advertising ProgramsBusiness Solutions+GoogleAbout Google

Я хочу знать, что можно с этим поделать?

Кстати, я проследил код и обнаружил, что проблема будет исправленадобавив эту строку:

textNode.text(textNode.text() + " ");

между строками 755 и 756 класса Element пакета nodes исходного кода jsoup.

Также эта проблема существует вElements класс пакета select и, возможно, другие text функции!

1 Ответ

3 голосов
/ 17 февраля 2012

Метод text() в jsoup возвращает только текст в элементе. В вашем примере ваш элемент - div. При вызове метода text() все теги по существу удаляются, а текст остается. Поскольку в программах нет места после него, похоже, что он скользит вверх по Business, что в данном случае является правильным поведением.

Если вы хотите текст отдельно, вы можете сделать что-то вроде этого (непроверенный код):

for (Element a : div.select("a")) {
     System.out.println(a.text());
}
...