Jsoup getElementsByAttributeValueMatching не работает - PullRequest
0 голосов
/ 10 июня 2018

У меня есть html-страница, на которой (помимо прочего) есть следующие элементы Div:

<div id="fact">
    <div class="fact">
       AAAAAA
     <div class="fact-label">
         BBBBBB
     </div> 
    </div>
 </div>

Я хочу извлечь только текст div, который имеет class = "fact"

Код:

Document page = Jsoup.connect(url).get();
        Elements element = page.select("div.fact"); 
        for (Element step : element) {

 System.out.println(step.getElementsByAttributeValueMatching("class", 
 Pattern.compile("^[a-t]{4}$")));
}

но это не работает, я получаю следующее:

<div class="fact">
    AAAAAA
   <div class="fact-label">
    BBBBBB
    </div> 
</div>

Мой вопрос: как я могу исключить внутренний Div, который имеет class = "fact-ярлык "?

Ответы [ 2 ]

0 голосов
/ 14 июня 2018

Мы также можем использовать следующий код для получения результата, здесь мы просим регулярное выражение сопоставить слово, оканчивающееся на «fact» (используя $ для обозначения конца строки), а затем извлекая «owntext ()».owntext () будет возвращать только текст из этого элемента, он не будет включать тексты своих дочерних элементов.

Elements el = doc.getElementsByAttributeValueMatching ("class", "fact $");

    for (Element ele : el){
        System.out.println(ele.ownText());
    }

Вывод: AAAAAA

0 голосов
/ 13 июня 2018

Следующий код решил проблему:

elem.select("div").remove().select("div.fact").text();
...