сталкиваются с проблемами с получением данных - PullRequest
0 голосов
/ 12 июня 2019

У меня есть одна HTML-страница, я пытаюсь получить данные (текст) с нее.Столкнувшись с проблемой ниже.

Ниже приведен код HTML-страницы

<div class="main-class">
<div class="sub-class">
<p class="title">Title of data one</p>
<p>one data</p>
<p>two line</p>
<p> three line</p>
<ul>
<li>a</li>
<li>b</li>
<li>c</li>
</ul>
</div>
<div class="sub-class">
<p class="title">Title of data two</p>
<p>asd sdffsdfsdf</p>
    <p>asd dfgdfg</p>
    <p>asd dfgdfgd</p>
    <ul>
    <li>qweqwe</li>
    <li>fghgfhgf</li>
    <li>gdfgdfgd</li>
    </ul>
    <p>new p tag</p>
    <table>ignore</table>
    </div>
    </div>

есть один подкласс основного класса два. Я могу получить весь текст из основного класса.Но нужно хранить данные из первого подкласса в одной строке и второго подкласса в другой строке.Необходимо игнорировать последний тег p и тег таблицы.

Условие состоит в том, что некоторое время может отсутствовать первый подкласс. Поэтому данные из второго подкласса должны попадать во вторую строку, а первая строка должна быть нулевой.

Я попробовал следующий код

Elements data = doc.getElementsByClass("sub-class");
    System.out.println(data);
    String allData= data .text();

Я получаю весь текст из подкласса.

У меня возникают следующие проблемы 1. Не удается сохранить данные первого подклассав первой строке =?2. Не удалось сохранить данные второго подкласса в строке два =?3. Не удалось получить <ul> <li> tag text data.4. Невозможно игнорировать последние <p> tag and <table> tag

Elements elements = document.getElementsByClass("main-class");
   Elements subClassData1 = document.select("div.sub-class:eq(0)");

    if(elements.hasText()){
      return elements.text().toString();
    }
    else if(subClassData1 != null){
      return subClassData1.text().toString();

      }

    }

Ожидаемый результат:

Данные подкласса один = " Название данных один: одна строка данных две строки три строки abc

Подкласс два data = " Название данных два: asd sdffsdfsdf asd dfgdfg asd fgdfgd qweqwe fghgfhgf gdfgdfgd

1 Ответ

0 голосов
/ 12 июня 2019

Не совсем уверен, что если вы ищете это, но этот код ниже решает все 3 проблемы, настройте его по своему усмотрению в соответствии с вашими условиями, подход следующий:

По сути, у вас есть 2 элемента для 2 элементов подкласса, и они могут быть повторены. Кроме того, для второго элемента подкласса последние два дочерних элемента могут быть удалены.

    Document jsoupDocument = Jsoup.parse(in, "UTF-8");
    Elements allSubClassElements = jsoupDocument.getElementsByClass("sub-class");
    System.out.println("Num of sub-classes found "+allSubClassElements.size());
    System.out.printf("First Subclass %s", allSubClassElements.get(0).text());
    System.out.println();
    Element secondSubClassElement = allSubClassElements.get(1);

    //want to remove last 2 elements
    for (int i = secondSubClassElement.children().size(), j = 0; j < 2; i--, j++) {
        //element would be updated here.
        secondSubClassElement.child(i - 1).remove();
    }
    System.out.printf("Second Subclass %s", secondSubClassElement.text());
...