Skip to content

Instantly share code, notes, and snippets.

@wololock
Last active August 29, 2015 14:07
Show Gist options
  • Save wololock/ade801b2ccf65f21de4d to your computer and use it in GitHub Desktop.
Save wololock/ade801b2ccf65f21de4d to your computer and use it in GitHub Desktop.
Selecting last N elements from table rows that match given pattern
import org.jsoup.Jsoup
import org.jsoup.nodes.Document
import org.jsoup.nodes.Element
import org.jsoup.select.Elements
@Grab(group='org.jsoup', module='jsoup', version='1.8.1')
def html = '''
<table id="test">
<tr>
<td>ID: 2</td>
<td>Name: Something</td>
</tr>
<tr>
<td>ID: 3</td>
<td>Name: Lorem</td>
</tr>
<tr>
<td></td>
<td>skip me</td>
</tr>
<tr>
<td>ID: 4</td>
<td>Name: Ipsum</td>
</tr>
<tr>
<td>ID: 5</td>
<td>Name: Dolor</td>
</tr>
<tr>
<td>???</td>
<td>skip me</td>
</tr>
<tr>
<td></td>
<td>skip me</td>
</tr>
<tr>
<td>ID: 6</td>
<td>Name: Sit</td>
</tr>
</table>
'''
Document document = Jsoup.parse(html)
Elements elements = document.select('table#test tr:contains(ID)')
int numberOfLastElements = 3
List<Element> sublist = elements.subList(elements.size() - numberOfLastElements, elements.size())
assert sublist.every {
['ID: 4', 'ID: 5', 'ID: 6'].contains(it.select('td:first-child').html())
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment