Jsoup: получить текст от всех дочерних элементов - PullRequest
2 голосов
/ 23 января 2020

В документе, который я пытаюсь разобрать, есть этот элемент:

<span class="location accessible-contrast-color-location">
    Seattle, WA 98104 
    <span style="font-size: smaller">(Downtown area)</span>
</span>

Я пытаюсь получить из него текст Seattle, WA 98104 (Downtown area), но получаю только Seattle, WA 98104, используя этот код:

Element locationElement = companyWrapper.selectFirst(".location");
System.out.println((locationElement != null ? locationElement.text() : ""));

Я думал, text() должен взять текст внутри родительского элемента и его дочерних элементов, однако это не так?

РЕДАКТИРОВАТЬ :

Elements jobElements  =
        doc.select(".jobsearch-SerpJobCard.unifiedRow");
Element companyWrapper = jobElement.selectFirst(".sjcl");

1 Ответ

0 голосов
/ 24 января 2020

Решение 1

Вы можете получить текст элемента с помощью CSS имен классов. для этого вы должны использовать doc.select("span.location").text();

. В этом случае у вас есть элемент, у которого есть один дочерний элемент, а при вызове метода text текст основного узла (Сиэтл, WA 98104) и его дочерний объект (центр города) извлекается.

Код выглядит следующим образом:

   public static void main(String[] args) {


    String html = "<span class=\"location accessible-contrast-color-location\">" +
            "Seattle, WA 98104" +
            "<span style=\"font-size: smaller\">(Downtown area)</span>" +
            "</span>";


    Document doc = Jsoup.parse(html);
    String result = doc.select("span.location").text();
    System.out.println(result);


}

Решение 2

Вы также можете использовать tag имя, чтобы получить текст этого и его потомка.

Я закодировал ваш сценарий с помощью span tag.

   public static void main(String[] args) {


        String html= "<span class=\"location accessible-contrast-color-location\">" +
                "Seattle, WA 98104" +
                "<span style=\"font-size: smaller\">(Downtown area)</span>" +
                "</span>";


        Document doc = Jsoup.parse(html);
        String result= doc.select("span").first().text();
        System.out.println(result);
    }

Обратите внимание, так как вы хотите оба тексты, вы должны получить первый тег span, так как он содержит дочерний тег, поэтому вы можете извлечь из него текст родительского тега ((Seattle, WA 98104)), а также текст дочернего тега (центр города).

...