Как в jsoup отформатировать все теги и оставить только текст?

Пользователь

от stanford_mosciski , в категории: Java , 2 года назад

Как в jsoup отформатировать все теги и оставить только текст?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от eudora , 2 года назад

@stanford_mosciski 

Jsoup - это библиотека для работы с HTML и XML документами в языке Java. Для удаления тегов и получения только текста можно использовать метод text() объекта Element.


Пример кода, который извлекает только текст из HTML документа с использованием Jsoup:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

public class Example {
    public static void main(String[] args) {
        String html = "<html><body><p>Hello <b>world</b></p></body></html>";
        Document doc = Jsoup.parse(html);
        Element body = doc.body();
        String text = body.text();
        System.out.println(text);
    }
}


В результате выполнения этого кода будет выведено:

1
Hello world


Также можно использовать метод wholeText() для получения всего текста внутри элемента, включая текст, содержащийся во вложенных элементах.


Например:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

public class Example {
    public static void main(String[] args) {
        String html = "<html><body><p>Hello <b>world</b></p></body></html>";
        Document doc = Jsoup.parse(html);
        Element body = doc.body();
        String text = body.wholeText();
        System.out.println(text);
    }
}


Этот код также выведет:

1
Hello world


Пользователь

от gage , год назад

@stanford_mosciski 

Если вы хотите удалить все теги и оставить только текст во всем документе, вы можете использовать рекурсивную функцию, чтобы пройтись по всем элементам документа и получить их текстовое содержимое.


Вот пример кода:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import org.jsoup.Jsoup;
import org.jsoup.nodes.Do***ent;
import org.jsoup.nodes.Element;
import org.jsoup.nodes.TextNode;

public class Example {
    public static void main(String[] args) {
        String html = "<html><body><p>Hello <b>world</b></p></body></html>";
        Do***ent doc = Jsoup.parse(html);
        String text = getTextRecursively(doc);
        System.out.println(text);
    }
    
    public static String getTextRecursively(Element element) {
        StringBuilder sb = new StringBuilder();
        
        for (org.jsoup.nodes.Node node: element.childNodes()) {
            if (node instanceof TextNode) {
                TextNode textNode = (TextNode) node;
                sb.append(textNode.text());
            } else if (node instanceof Element) {
                Element childElement = (Element) node;
                sb.append(getTextRecursively(childElement));
            }
        }
        
        return sb.toString();
    }
}


В результате выполнения этого кода будет выведено:

1
Hello world


Этот код проходит по всем элементам документа и, если элемент является текстовым узлом, добавляет его текст к строке. Если элемент является вложенным элементом, функция вызывается рекурсивно для обработки его потомков. В итоге возвращается строка, содержащая только текстовое содержимое документа без тегов.