2013-09-29 4 views
0

Моя проблема заключается в том, что мне нужно получить div-класс внутри div-класса внутри div-класса, а 4 экземпляра классов с тем же именем, но с разными данными ... В настоящее время я могу получить первый div-класс внутри класс ДИВ, но мне нужно, чтобы иметь возможность получить доступ к другим элементам внутри него как хорошо ...... например:Как вы получаете div-класс внутри div-класса внутри div-класса?

docTide = Jsoup.connect("http://www.mhpa.co.uk/search-tide-times/").timeout(600000).get(); 
Elements tideTableRows = docTide.select("div.tide_row.odd"); 
Element firstDiv = tideTableRows.first(); 
Element secondDiv = tideTableRows.get(1); 
System.out.println("This is the first div: " + firstDiv.text()); 
System.out.println("This is the second div: " + secondDiv.text()); 

но это структура веб-страницы, где есть 2 повторы, и мне нужно, чтобы получить доступ к каждому из них, например:

<div class="tide_row odd"> 
    <div class="time">00:57</div> 
    <div class="height_m">4.9</div> 
    <div class="height_f">16,1</div> 
    <div class="range_m">1.9</div> 
    <div class="range_f">6,3</div> 
    </div> 
<div class="tide_row even"> 
    <div class="time">07:23</div> 
    <div class="height_m">2.9</div> 
    <div class="height_f">9,6</div> 
    <div class="range_m">2</div> 
    <div class="range_f">6,7</div> 
    </div> 
    <div class="tide_row odd"> 
    <div class="time">13:46</div> 
    <div class="height_m">5.1</div> 
    <div class="height_f">16,9</div> 
    <div class="range_m">2.2</div> 
    <div class="range_f">7,3</div> 
    </div> 
    <div class="tide_row even"> 
    <div class="time">20:23</div> 
    <div class="height_m">2.8</div> 
    <div class="height_f">9,2</div> 
    <div class="range_m">2.3</div> 
    <div class="range_f">7,7</div> 
    </div> 

Таким образом, в основном он имеет вложенные классы в отдельных классах с одинаковым именем, ho w Можно ли построить правильный синтаксис для возврата данных из классов отдельно? Это довольно сложно объяснить!

Edit: Это, как мне удалось извлечь информацию из вложенных классов:

docTide = Jsoup.connect("http://www.mhpa.co.uk/search-tide-times/").timeout(600000).get(); 
         Elements tideTimeOdd = docTide.select("div.tide_row.odd div:eq(0)"); 
         Elements tideTimeEven = docTide.select("div.tide_row.even div:eq(0)"); 
         Elements tideHightOdd = docTide.select("div.tide_row.odd div:eq(2)"); 
         Elements tideHightEven = docTide.select("div.tide_row.even div:eq(2)"); 
          Element firstTideTime = tideTimeOdd.first(); 
          Element secondTideTime = tideTimeEven.first(); 
          Element thirdTideTime = tideTimeOdd.get(1); 
          Element fourthTideTime = tideTimeEven.get(1); 

          Element firstTideHight = tideHightOdd.first(); 
          Element secondTideHight = tideHightEven.first(); 
          Element thirdTideHight = tideHightOdd.get(1); 
          Element fourthTideHight = tideHightEven.get(1); 

ответ

1

Это будет работать нормально, просто делая:

docTide = Jsoup.connect("http://www.mhpa.co.uk/search-tide-times/").timeout(600000).get(); 
          Elements tideTableRows = docTide.select("div[class=tide_row odd]"); 
          Element firstDiv += tideTableRows.select("div[class=time]"); 
          Element secondDiv += tideTableRows.select("div[class=height]"); 

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

Seperate элементы:

docTide = Jsoup.connect("http://www.mhpa.co.uk/search-tide-times/").timeout(600000).get(); 
          Element tideTableRows = docTide.select("div[class=tide_row odd]").first(); 
          Element firstDiv1 = tideTableRows.select("div[class=time]"); 
          Element secondDiv1 = tideTableRows.select("div[class=height]"); 
          tideTableRows2 = docTide.select("div[class=tide_row odd]").second(); 
          Element firstDiv2 = tideTableRows.select("div[class=time]"); 
          Element secondDiv2 = tideTableRows.select("div[class=height]"); 
+0

Привет, спасибо. Как есть 2 "div class tide row odd" и 2 "div class tide row even" с разными данными в каждом случае, это позволяет мне получить доступ к данным отдельно? –

+0

Просто попробовал и все еще проблема, что он обращается к 2 классам разных классов (строка приливов) или (нечетная строка приливов), но называется одинаковой и возвращает значения из каждого из классов. Есть идеи? –

+0

@ J4C3N-14, если вы хотите добавить элемент, который вы извлекаете в свои Элементы, тогда вы должны сделать редактирование, которое я только что сделал. – superuser

1

Вы можете попробовать это:

docTide = Jsoup.connect("http://www.mhpa.co.uk/search-tide-times/").timeout(600000).get(); 
Elements tideTableRows = docTide.select("div.tide_row"); 
for (Element tideTableRow : tideTableRows){ 
    if (tideTableRow.hasClass("odd")){ 
    //do the odd stuff... 
    } 
    Elements innerDivs = tideTableRows.select("div"); 

    for (Element innerDiv : innerDivs){ 
    //do whatever you need 
    } 
} 

Примечание: Код не проверял.

Обновление: Я показал вам, как получить доступ к нечетным строкам ... Оттуда вы должны быть в состоянии получить остальное самостоятельно, я надеюсь.

+0

Это будет возвращать значения для обоих классов, называемых отлив строк нечетное и отлив строк даже, я хочу, чтобы иметь возможность получить данные separate.Thanks –

+0

я изменил мой ответ, чтобы показать вам – luksch

+0

Привет, Спасибо за вашу помощь. теперь поняли, как это сделать. –

Смежные вопросы